How to bind a JPA entity as a backing bean for a simple CRUD screen
infinity2heaven Jan 31, 2011 3:21 PMVery simple use case: A Create screen for a CRUD operation.
SLSB
@Stateless(name="memberRegistration")
public class MemberRegistrationImpl
implements MemberRegistration {
@PersistenceContext
private EntityManager em;
@Inject
private Event< Member > event;
// backing/binding bean used in JSF page. Also a JPA entity
// @Model also doesn't work. Don't think I can @Inject an entity object either
private Member member = new Member();
public String register() {
em.persist( member );
event.fire( member );
return "home";
}
public Member getMember() {
return member;
}
public void setMember(
Member member ) {
this.member = member;
}
}jsf page:
<h:form id="registration" prependId="false">
<h:panelGroup styleClass="" layout="block">
<div class="prompt">#{label}</div>
<h:panelGrid columns="1">
first name:
<h:inputText value="#{memberRegistration.member.firstName}" required="true" />
last name:
<h:inputText value="#{memberRegistration.member.lastName}" required="true" />
email:
<h:inputText value="#{memberRegistration.member.email}" required="true" />
phone number:
<h:inputText value="#{memberRegistration.member.phoneNumber}" />
dob:
<h:inputText value="#{memberRegistration.member.dob}" required="true" />
notes:
<h:inputTextarea value="#{memberRegistration.member.notes}" />
</h:panelGrid>
<h:panelGroup>
<h:commandButton id="lsubmitButton" value="Save"
action="#{memberRegistraion.save}" />
</h:panelGroup>
</h:panelGroup>
</h:form>
On page load, I get this error
Error Rendering View[/patient-registration.xhtml]: javax.el.PropertyNotFoundException: /patient-registration.xhtml @20,95 value="#{memberRegistration.member.firstName}": The class 'xxx.demoportal.controller.org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$xxx$dev$servers$jboss-6$0$0$Final$server$default$deploy$demo$portal$war"-ManagedBean-class_xxx$demoportal$controller$MemberRegistration_$$_WeldClientProxy' does not have the property 'member'.
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:108) [:2.0.3-]
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190) [:2.0.3-]
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178) [:2.0.3-]
at javax.faces.component.UIOutput.getValue(UIOutput.java:164) [:2.0.3-]
at com.sun.faces.renderkit.html_basic.HtmlBas