ein anfänger-problem mit jsf2 und cdi... folgendes problem: vier dateien (index.xhtml, User.java, DateUtil.java, response.xhtml). die kombination der dateien passt auch soweit und ich erhalte das, was ich möchte, wenn ich nun das @ManagedBean durch @Named ersetze, dann bekomme ich den fehler
/index.xhtml @18,82 value="#{user.name}": Target Unreachable, identifier 'user' resolved to null
habe gelesen, dass @Named neuer (seit JSF2?) ist und ich frage mich, was der Fehler sein kann... wie gesagt, wenn ich in User.java und DateUtil.java statt @ManagedBean ein @Named einsetze, wird obiger Fehler angezeigt. Das User ist ja aber bekannt und auch NetBeans erkennt den Querverweis durch Links zur entsprechenden User-Klasse. woran kanns also liegen?
index.xhtml
[XML]<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Validierung</title>
</h:head>
<h:body>
<h:form>
<h
anelGrid columns="3">
<!-- name -->
Wie heißen Sie?
<h:inputText id="name" value="#{user.name}"
required="true"
requiredMessage="Bitte geben Sie Ihren Namen ein."/>
<h:message for="name" style="color:red"/>
<!-- year of birth -->
Ihr Geburtsjahr?
<h:inputText id="yob" value="#{user.yearOfBirth}"
required="true"
requiredMessage="Bitte geben Sie Ihr Geburtsjahr ein."
converterMessage="Bitte eine Zahl von #{dateUtil.minimumBirthYear} bis #{dateUtil.currentYear} eingeben."
validatorMessage="Bitte geben Sie Ihr tatsächliches Geburtsjahr an." >
<f:validateLongRange minimum="#{dateUtil.minimumBirthYear}" maximum="#{dateUtil.currentYear}"/>
</h:inputText>
<h:message for="yob" style="color:red"/>
</h
anelGrid>
<h:commandButton action="response" value="Und los!"/>
</h:form>
</h:body>
</html>[/XML]
User.java
DateUtil.java
response.xhtml
[XML]<?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:h="http://java.sun.com/jsf/html">
<h:head>
<title>Validierung</title>
</h:head>
<h:body>
<h1>Hallo #{userFoo.name}!</h1>
<h2>Dann sind Sie wohl etwa #{user.age} Jahre alt.</h2>
</h:body>
</html>[/XML]
/index.xhtml @18,82 value="#{user.name}": Target Unreachable, identifier 'user' resolved to null
habe gelesen, dass @Named neuer (seit JSF2?) ist und ich frage mich, was der Fehler sein kann... wie gesagt, wenn ich in User.java und DateUtil.java statt @ManagedBean ein @Named einsetze, wird obiger Fehler angezeigt. Das User ist ja aber bekannt und auch NetBeans erkennt den Querverweis durch Links zur entsprechenden User-Klasse. woran kanns also liegen?
index.xhtml
[XML]<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Validierung</title>
</h:head>
<h:body>
<h:form>
<h
<!-- name -->
Wie heißen Sie?
<h:inputText id="name" value="#{user.name}"
required="true"
requiredMessage="Bitte geben Sie Ihren Namen ein."/>
<h:message for="name" style="color:red"/>
<!-- year of birth -->
Ihr Geburtsjahr?
<h:inputText id="yob" value="#{user.yearOfBirth}"
required="true"
requiredMessage="Bitte geben Sie Ihr Geburtsjahr ein."
converterMessage="Bitte eine Zahl von #{dateUtil.minimumBirthYear} bis #{dateUtil.currentYear} eingeben."
validatorMessage="Bitte geben Sie Ihr tatsächliches Geburtsjahr an." >
<f:validateLongRange minimum="#{dateUtil.minimumBirthYear}" maximum="#{dateUtil.currentYear}"/>
</h:inputText>
<h:message for="yob" style="color:red"/>
</h
<h:commandButton action="response" value="Und los!"/>
</h:form>
</h:body>
</html>[/XML]
User.java
Java:
package de.jee6.test.greetingvalidation;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Inject;
import javax.inject.Named;
//@Named
//@SessionScoped
@ManagedBean
public class User {
@Inject DateUtil dateUtil;
private String name;
private Integer yearOfBirth;
public String getName() {
return name;
}
public Integer getYearOfBirth() {
return yearOfBirth;
}
public void setName(String name) {
this.name = name;
}
public void setYearOfBirth(Integer yearOfBirth) {
this.yearOfBirth = yearOfBirth;
}
public int getAge() {
Logger.getAnonymousLogger().log(Level.WARNING, "getAge()" + dateUtil);
//return dateUtil.getCurrentYear() - yearOfBirth;
return 2011 - yearOfBirth;
}
}
DateUtil.java
Java:
package de.jee6.test.greetingvalidation;
import java.io.Serializable;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.inject.Named;
//@Named
@ManagedBean
public class DateUtil implements Serializable {
public int getMinimumBirthYear() {
return 1800;
}
public int getCurrentYear() {
Logger.getLogger(DateUtil.class.getName()).log(Level.INFO,
"### DateUtil.getCurrentYear");
return Calendar.getInstance().get(Calendar.YEAR);
}
}
response.xhtml
[XML]<?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:h="http://java.sun.com/jsf/html">
<h:head>
<title>Validierung</title>
</h:head>
<h:body>
<h1>Hallo #{userFoo.name}!</h1>
<h2>Dann sind Sie wohl etwa #{user.age} Jahre alt.</h2>
</h:body>
</html>[/XML]