Faces Event > EJBTransactionRolledbackException > @In attribute requires non-null value
arvinder Jun 12, 2009 10:00 AMHi
I am following the examples from seam in action (www.manning.com/dallen) and am using an ear deployment instead of war.
What I have here is a simple registration example, that used faces events to validate a field when an event is raised, like tab over the field.
In summary, the main difference is that I am deploying this in an ear and I am not sure why this error is occuring - I have
looked in the formums and tried adding this to the action, but nothing has worked:
@In(create = true,required=true) protected PasswordBean passwordBean = new PasswordBean();
RegisterBean
@Stateless @Name("register") public class RegisterBean implements Register { @Logger private Log log; @In StatusMessages statusMessages; @In private Member newMember; @PersistenceContext private EntityManager entityManager; @In protected MemberValidator memberValidator; @In protected PasswordManager passwordManager; @In(create = true,required=true) protected PasswordBean passwordBean = new PasswordBean(); @In private FacesMessages facesMessages; public String register() { ... return "success"; } public boolean isUsernameAvailable(String username) { log.info("Checking if username is available " + username); return entityManager.createQuery( "select m from Member m where m.username = :username") .setParameter("username", username) .getResultList().size() == 0; } public boolean isEmailRegistered(String email) { return entityManager.createQuery( "select m from Member m where m.email = :email") .setParameter("email", email) .getResultList().size() > 0; } public void verifyUsernameAvailable(ValueChangeEvent e) { String username = (String) e.getNewValue(); if (!isUsernameAvailable(username)) { facesMessages.addToControl(e.getComponent().getId(), "Sorry, username already taken"); } } public void checkEmailRegistered(ValueChangeEvent e) { String email = (String) e.getNewValue(); if (isEmailRegistered(email)) { facesMessages.addToControl(e.getComponent().getId(), "Sorry, email address is already registered"); } } }
Error
08:40:07,016 ERROR [STDERR] 12-Jun-2009 08:40:07 com.sun.facelets.compiler.TagLibraryConfig loadImplicit INFO: Added Library from: jar:file:/C:/projects/jboss-4.2.3.GA/server/default/deploy/example.ear/example.war/WEB-INF/li b/richfaces-ui.jar!/META-INF/richfaces.taglib.xml 08:40:18,813 ERROR [AjaxViewRoot] Error processing faces event for the component registerActionForm:usernameField:username javax.faces.event.AbortProcessingException: /register.xhtml @28,65 valueChangeListener="#{register.verifyUsernameAvailable}": javax.ejb.EJBTransactionRolledbackException: @In attribute requires non-null value: register.passwordBean at javax.faces.event.MethodExpressionValueChangeListener.processValueChange
Auth Package
package-info.java
@Namespace(value = "http://example.org/components/auth", prefix = "org.example.auth") @AutoCreate package com.example.app.ex.auth; import org.jboss.seam.annotations.AutoCreate; import org.jboss.seam.annotations.Namespace;
PasswordBean
@BypassInterceptors public class PasswordBean { private String password; private String confirm; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfirm() { return confirm; } public void setConfirm(String confirm) { this.confirm = confirm; } public boolean verify() { return confirm != null && confirm.equals(password); } }
components.xml
<import>org.example.auth</import> <auth:password-bean name="passwordBean" scope="event"/>