Newbee question concerning injection
ben_utzer Sep 15, 2011 3:29 AMHi guys,
I'm having some trouble getting my first simple example app to do what I want and I hope someone can help.
The problem is that #{person.nachname} is null after I entered some text and submitted the form. What am I doing wrong?
It's running with the lates AS 7 Snapshot.
Here's the code:
pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example.seam</groupId> <artifactId>seam-sandbox</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <seam.bom.version>3.1.0.Beta2</seam.bom.version> <jboss.javaee6.version>2.0.0.Final</jboss.javaee6.version> <jodatime.version>1.6.2</jodatime.version> <arquillian.version>1.0.0.CR2</arquillian.version> <arquillian.jbossas7.version>7.0.0.Final</arquillian.jbossas7.version> <richfaces.version>4.1.0.20110805-M1</richfaces.version> <prettyfaces.version>3.3.0</prettyfaces.version> <junit.version>4.8.2</junit.version> <jbossas.7.version>7.0.1.Final</jbossas.7.version> <primefaces.version>3.0.RC1-SNAPSHOT</primefaces.version> </properties> <!-- Use the Seam 3 BOM to get the correct versions for most modules --> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.seam</groupId> <artifactId>seam-bom</artifactId> <version>${seam.bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.richfaces</groupId> <artifactId>richfaces-bom</artifactId> <version>${richfaces.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.jboss.spec</groupId> <artifactId>jboss-javaee-6.0</artifactId> <version>${jboss.javaee6.version}</version> <type>pom</type> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.seam.faces</groupId> <artifactId>seam-faces</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.international</groupId> <artifactId>seam-international</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.catch</groupId> <artifactId>seam-catch</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.security</groupId> <artifactId>seam-security</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.config</groupId> <artifactId>seam-config-xml</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.validation</groupId> <artifactId>seam-validation</artifactId> </dependency> <!-- This and setting the build to 1.6 enable the annotation processor to be used for logging --> <dependency> <groupId>org.jboss.seam.solder</groupId> <artifactId>seam-solder-tooling</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.seam.solder</groupId> <artifactId>seam-solder-logging</artifactId> <version>3.1.0.Beta2</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${jodatime.version}</version> </dependency> <dependency> <groupId>org.richfaces.ui</groupId> <artifactId>richfaces-components-ui</artifactId> </dependency> <dependency> <groupId>org.richfaces.core</groupId> <artifactId>richfaces-core-impl</artifactId> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>${primefaces.version}</version> </dependency> <!-- Runtime dependencies --> <dependency> <groupId>com.ocpsoft</groupId> <artifactId>prettyfaces-jsf2</artifactId> <version>${prettyfaces.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.jboss.seam.transaction</groupId> <artifactId>seam-transaction</artifactId> </dependency> <dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <version>${arquillian.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.shrinkwrap.resolver</groupId> <artifactId>shrinkwrap-resolver-impl-maven</artifactId> <version>1.0.0-beta-3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.0.1.GA</version> </dependency> <dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>jboss-logmanager</artifactId> <version>1.2.0.GA</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <!-- This plugin config is used to set the Dependencies entry in META-INF/MANIFEST.MF so that in AS7 both JBoss Logging and the JBoss Log manager will be available in the classpath --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <manifestEntries> <Dependencies>org.jboss.logging,org.jboss.logmanager,org.apache.log4j</Dependencies> </manifestEntries> </archive> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>default-test</id> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <excludes> <exclude>**/integration/**/*.java</exclude> </excludes> </configuration> </execution> </executions> </plugin> </plugins> </build> <profiles> <profile> <id>jboss-public-repository</id> <activation> <property> <name>jboss-public-repository</name> <value>!false</value> </property> </activation> <repositories> <repository> <id>jboss-public-repository-group</id> <name>JBoss Public Maven Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss-public-repository-group</id> <name>JBoss Public Maven Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <id>arq-jboss-as-managed</id> <activation> <property> <name>integration</name> </property> </activation> <dependencies> <dependency> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-arquillian-container-managed</artifactId> <version>${arquillian.jbossas7.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-as7</id> <phase>generate-test-sources</phase> <!-- So run before testing --> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-dist</artifactId> <version>${jbossas.7.version}</version> <type>zip</type> <overWrite>false</overWrite> <outputDirectory>${project.build.directory}</outputDirectory> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>integration-tests</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> <includes> <include>**/integration/**/*.java</include> </includes> <redirectTestOutputToFile>true</redirectTestOutputToFile> <trimStackTrace>false</trimStackTrace> <printSummary>true</printSummary> <forkMode>once</forkMode> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>
Bean Test:
package beans; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Produces; import javax.inject.Inject; import javax.inject.Named; import domain.Person; @SessionScoped @Named public class Test implements Serializable { @Inject private Person person; @PostConstruct void initialize() { person = new Person(); } @Named @Produces @SessionScoped public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public String zeigeAusgewaehltePerson() { System.out.println(this.person); return null; } }
Bean Person:
package domain; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.jboss.seam.solder.core.Veto; @Veto //@Entity public class Person implements Serializable { // @Id // @GeneratedValue private Long id; private String nachname; private String vorname; public void setNachname(String nachname) { this.nachname = nachname; } public String getNachname() { return nachname; } public void setVorname(String vorname) { // TODO Auto-generated method stub this.vorname = vorname; } public String getVorname() { return vorname; } @Override public String toString() { return "Person [id=" + id + ", nachname=" + nachname + ", vorname=" + vorname + "]"; } }
index.xhtml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:a4j="http://richfaces.org/a4j" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:rich="http://richfaces.org/rich"> <h:head> </h:head> <h:body> <h:form> <h:inputText value="#{person.nachname}" /> <h:commandButton action="#{test.zeigeAusgewaehltePerson}" value="Klick"> </h:commandButton> <h:panelGroup id="out"> <h:outputText value="#{person.nachname}" /> </h:panelGroup> </h:form> </h:body> </html>