Validation throws an exception instead of redisplaying the p
gaboo Jun 21, 2007 10:38 AMHere is the page :
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.ajax4jsf.org/rich" template="../layout/template.xhtml"> <ui:define name="body"> <h:messages styleClass="message"/> <ui:include src="usersMenu.xhtml"/> <h:form> <s:validateAll> <f:facet name="aroundInvalidField"> <s:span styleClass="errors"/> </f:facet> <f:facet name="afterInvalidField"> <s:span> <s:message/></s:span> </f:facet> <s:decorate>#{messages['lrb.user.id']} <h:inputText id="id" value="#{user.id}"/></s:decorate><br/> <s:decorate>#{messages['lrb.user.username']} <h:inputText id="username" value="#{user.username}"/></s:decorate><br/> <s:decorate>#{messages['lrb.user.password']} <h:inputText id="password" value="#{user.password}"/></s:decorate><br/> <s:decorate>#{messages['lrb.user.email']} <h:inputText id="email" value="#{user.email}"/></s:decorate> </s:validateAll> <!-- actions --> <div class="actionButtons"> <s:link view="/admin/users.xhtml" value="#{messages['lrb.cancel']}"/> <h:outputText value=" "/> <h:commandLink action="#{userHome.update}" value="#{messages['lrb.update']}" rendered="#{userHome.managed}"/> <h:outputText value=" "/> <s:link action="#{userHome.remove}" value="#{messages['lrb.delete']}" rendered="#{userHome.managed}"/> <h:outputText value=" "/> <h:commandLink action="#{userHome.persist}" value="#{messages['lrb.create']}" rendered="#{!userHome.managed}"/> </div> </h:form> </ui:define> </ui:composition>
the entity in components.xml :
<factory name="user" value="#{userHome.instance}"/> <fwk:entity-home name="userHome" entity-class="com.lrb.metabook.User" new-instance="#{newUser}"/> <component name="newUser" class="com.lrb.metabook.User"/> <fwk:entity-query name="users" max-results="5"> <fwk:ejbql>from User</fwk:ejbql> <fwk:order>id</fwk:order> </fwk:entity-query>
The thing is that if I add required="true" to each h:inputText, it works as expected, but do not follow annotated validation.
Here is the entity bean :
package com.lrb.metabook; // Generated 10 juin 2007 20:21:17 by Hibernate Tools 3.2.0.b9 import java.util.Iterator; /** * User generated by hbm2java */ @Entity public class User implements java.io.Serializable { private long id; private String password; private String username; private List<Role> roles; private String email; public User() { } public User(long id, String password, String username) { this.id = id; this.password = password; this.username = username; } @Id @GeneratedValue public long getId() { return this.id; } public void setId(long id) { this.id = id; } @NotNull @Length(min = 1, max = 20) public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } @NotNull @Length(min = 1, max = 20) public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } @ManyToMany public List<Role> getRoles() { return roles; } private void setRoles(List<Role> roles) { this.roles = roles; } /** * @return roles list */ public String rolesList() { if (roles != null) { StringBuffer sb = new StringBuffer(); for (Iterator iter = roles.iterator(); iter.hasNext();) { Role role = (Role) iter.next(); sb.append(role.getName() + " "); } return sb.toString(); } return ""; } @NotNull @Email public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
I'm using seam 1.3.0ALPHA
Any idea ?