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 ?