Validation Issue with RF3.30
tuxbox May 2, 2009 11:14 AMHi!
First of all, I want to say how much I like RichFaces, it's really an awesome component collection and I really do like to work with them.
However, today I expierience some issues when I use some input validation features, mainly I do not get any responses by the validation components, regardless if I'm using standard validators like f:validateLength or my custom ValidationClass. I know, that the validation method is called as the Tomcat output confirms that.
here's my jsp file:
<%@ page language="java" contentType="text/html; charset=US-ASCII"
 pageEncoding="US-ASCII"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<f:view>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 <title>Tippspiel - Register</title>
 </head>
 <body>
 <a4j:form>
 <rich:panel header="Registration Form">
 <h:panelGrid columns="3">
 <h:outputLabel for="inUsername" value="Username*"/>
 <h:inputText id="inUsername" value="#{userRegistration.username}" required="true">
 <f:validator validatorId="UsernameValidator"/>
 <a4j:support event="onkeyup" eventsQueue="usernameQueue" requestDelay="500" reRender="inUsernameMsg"/>
 </h:inputText>
 <h:message for="inUsername" id="inUsernameMsg" />
 <h:outputLabel for="inFirstname" value="Firstname*"/>
 <h:inputText id="inFirstname" value="#{userRegistration.firstname}" required="true">
 <f:validateLength minimum="2" maximum="32"/>
 <a4j:support event="onblur" reRender="inFirstnameMsg"/>
 </h:inputText>
 <h:message for="inFirstname" id="inFirstnameMsg"/>
 <h:outputLabel for="inLastname" value="Lastname*"/>
 <h:inputText id="inLastname" value="#{userRegistration.lastname}" required="true">
 <f:validateLength minimum="2" maximum="32"/>
 <a4j:support event="onblur" reRender="inLastnameMsg" />
 </h:inputText>
 <h:message for="inLastname" id="inLastnameMsg"/>
 <h:outputLabel for="inEmail" value="E-Mail*"/>
 <h:inputText id="inEmail" value="#{userRegistration.email}" required="true">
 <f:validator validatorId="eMailValidator"/>
 <a4j:support event="onblur" reRender="inEmailMsg"/>
 </h:inputText>
 <h:message for="inEmail" id="inEmailMsg"/>
 <h:outputLabel for="inPassword" value="Password*"/>
 <h:inputSecret id="inPassword" value="#{userRegistration.password}" required="true"/>
 <h:message for="inPassword"/>
 <h:outputLabel for="inPasswordConfirm" value="Password (confirm)*"/>
 <h:inputSecret id="inPasswordConfirm" value="#{userRegistration.passwordConfirm}" required="true"/>
 <h:message for="inPasswordConfirm"/>
 </h:panelGrid>
 <a4j:commandButton action="submit" value="Register"></a4j:commandButton>
 </rich:panel>
 </a4j:form>
 </body>
</html>
</f:view>
and here's my custom validation method:
public void validate( FacesContext context, UIComponent component, Object value )
 throws ValidatorException {
 String username = (String)value;
 System.out.println("Checking Username `"+username+"`");
 this.db = new MySQL("testuser","testpassword","192.168.5.254");
 this.db.connect();
 this.db.selectDatabase("db_name");
 PreparedStatement stmt = this.db.createPreparedStatement(SQL_CHECK_USERNAME);
 try {
 stmt.setString(1, username);
 stmt.execute();
 ResultSet rs = stmt.getResultSet();
 rs.next();
 if( rs.getString("amount").equals("1")) {
 FacesMessage fm = new FacesMessage();
 fm.setSeverity(FacesMessage.SEVERITY_ERROR);
 fm.setDetail("Username already exsists!");
 fm.setSummary("Username exsists!");
 System.out.println(fm.getDetail());
 throw new ValidatorException(fm);
 }
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
since the validation method is called properly, I don't paste my faces-config.xml.
Thank you for your help! Any help is very appreciated!
cu
tuxbox