Hallo,
ich habe hier eine Fehlermeldung bei der ich eigentlich sagen würde "Hey, das ist mal eine Fehlermeldung, bei der man weiß was man zu tun hat.". Die Fehlermeldung lautet:
Nun würde ich vermuten, dass ich entweder kein Zugriff auf registerBean habe oder registerBean keinen Zugriff auf address oder address eben keinen Zugriff auf country. Ich hab aber bereits den ganzen Weg überprüft und bin zu dem Schluss gekommen, dass alles passt. Gruml.
Also ich habe eine Seite zum Registrieren:
register.xhtml:
Auf dieser Seite klicke ich dann auf "Registrieren", dann kommt die entsprechende Fehlermeldung.
Jetzt noch der Code der damit zusammenhängt.
RegisterBean.java
Da die Annotation @ManagedBean dabei steht, sollte die Bean doch eigentlich erreichbar sein?
Person.java
Address.java
StackTrace
Könnt Ihr mir sagen, was ich nun korrigieren muss?
Gruß hyperion
ich habe hier eine Fehlermeldung bei der ich eigentlich sagen würde "Hey, das ist mal eine Fehlermeldung, bei der man weiß was man zu tun hat.". Die Fehlermeldung lautet:
Code:
javax.el.PropertyNotFoundException: /register.xhtml @28,93 value="#{registerBean.person.address.country}": Target Unreachable, 'null' returned null"
Also ich habe eine Seite zum Registrieren:
register.xhtml:
Java:
<?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"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Registrierung</title>
</h:head>
<h:body>
<h:form id="registerForm">
<h:panelGrid id="registerPanelGrid" columns="2">
<h:outputText value="Loginname:" />
<h:inputText id="loginName" value="#{registerBean.user.loginName}" maxlength="45"/>
<h:outputText value="Passwort:" />
<h:inputSecret id ="password" value="#{registerBean.user.loginPassword}" maxlength="45"/>
<h:outputText value="Name:" />
<h:inputText id="name" value="#{registerBean.person.name}" maxlength="45"/>
<h:outputText value="Vorname:" />
<h:inputText id="firstName" value="#{registerBean.person.firstName}" maxlength="45"/>
<h:outputText value="E-Mail:" />
<h:inputText id="mail" value="#{registerBean.user.mail}" maxlength="45"/>
<h:outputText value="Land:" />
<h:inputText id="country" value ="#{registerBean.person.address.country}" />
<h:outputText value="Stadt:" />
<h:inputText id="city" value="#{registerBean.person.address.city}" maxlength="45"/>
<h:outputText value="Straße:" />
<h:inputText id="street" value="#{registerBean.person.address.street}" maxlength="45"/>
<h:outputText value="Hausnummer:" />
<h:inputText id="houseNumber" value="#{registerBean.person.address.houseNumber}" maxlength="8"/>
<h:outputText value="Zusatz:" />
<h:inputText id="additional" value="#{registerBean.person.address.additional}" maxlength="45"/>
<h:outputText value="Geburtstag:" />
<h:inputText id="birthday" value="#{registerBean.person.birthday}">
<f:convertDateTime pattern="dd.mm.yyyy"/>
</h:inputText>
<h:commandButton id="register" action="#{registerBean.register}" value="Registrieren" />
</h:panelGrid>
</h:form>
</h:body>
</html>
Auf dieser Seite klicke ich dann auf "Registrieren", dann kommt die entsprechende Fehlermeldung.
Jetzt noch der Code der damit zusammenhängt.
RegisterBean.java
Java:
package beans;
import model.User;
import model.Person;
import hibernate.session.SessionFactoryUtil;
import java.util.Date;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
@ManagedBean(name="registerBean")
@RequestScoped
public class RegisterBean {
private Person person = new Person();
private User user = new User();
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String register(){
user.setRegisterDate(new Date());
Transaction tx = null;
Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
try {
tx = session.beginTransaction();
user.setPerson(person);
person.setUser(user);
session.save(person);
session.save(user);
tx.commit();
return "success";
} catch (RuntimeException e) {
if (tx != null && tx.isActive()) {
try {
// Second try catch as the rollback could fail as well
tx.rollback();
} catch (HibernateException e1) {
}
// throw again the first exception
throw e;
}
}
return "failed";
}
}
Da die Annotation @ManagedBean dabei steht, sollte die Bean doch eigentlich erreichbar sein?
Person.java
Java:
package model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.Past;
@Entity
@Table(name="Person")
public class Person implements Serializable{
@Id
@Column(name = "Person_ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "Name", nullable = false)
private String name;
@Column(name = "FirstName", nullable = false)
private String firstName;
@OneToOne(mappedBy="person")
private User user;
@Column(name = "Birthday", nullable = true)
@Temporal(javax.persistence.TemporalType.DATE)
@Past
private Date birthday;
@ManyToOne
@JoinColumn(name = "Address_ID")
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
Address.java
Java:
package model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
public class Address implements Serializable{
@Column(name = "Address_ID", nullable = false)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "Country", nullable = false)
private String country;
@Column(name = "City", nullable = false)
private String city;
@Column(name = "Street", nullable = false)
private String street;
@Column(name = "HouseNumber", nullable = false)
private String houseNumber;
@OneToOne(mappedBy="address")
private Person person;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getHouseNumber() {
return houseNumber;
}
public void setHouseNumber(String houseNumber) {
this.houseNumber = houseNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
StackTrace
Java:
javax.el.PropertyNotFoundException: /register.xhtml @28,93 value="#{registerBean.person.address.country}": Target Unreachable, 'null' returned null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
at javax.faces.component.UIInput.validate(UIInput.java:960)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
at javax.faces.component.UIInput.processValidators(UIInput.java:698)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Könnt Ihr mir sagen, was ich nun korrigieren muss?
Gruß hyperion