5 Replies Latest reply on Oct 5, 2007 4:24 AM by Dmitry Demyankov

    How to disable validation when selecting tab ?

    Olivier Thierry Apprentice

      Hi,

      I have a tabPanel component with switchType ajax. It contains two tabs with input fields, including calendars.

      My problem is that when I select a tab the validation phase is runned, so I can't change tab until I filled all required fields. I'd like the validation to happen only when I submit my form, not when I change tab. I tried to add immediate="true" to my tabPanel, I have no more validation problems, but then I have a problem with converter when the form is submitted :

      Exception during request processing:
      Caused by javax.servlet.ServletException with message: "No Converter for type java.util.Date found"


      What is the good way to do this ?

      My JSP page is as following :

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:s="http://jboss.com/products/seam/taglib"
       xmlns:rich="http://richfaces.org/rich"
       xmlns:a4j="http://richfaces.org/a4j">
      
      <ui:composition template="/WEB-INF/templates/template.xhtml">
       <ui:define name="body">
       <f:view>
       <rich:messages />
       <rich:panel >
       <h:form>
       <rich:tabPanel switchType="ajax" immediate="true">
       <rich:tab label="#{messages['label.ongletInfosGenerales']}">
       <h:panelGrid columns="2">
       <h:outputLabel value="#{messages['label.matricule']} :" for="matricule" />
       <h:inputText id="matricule" value="#{employe.matricule}" required="true" />
      
       <h:outputLabel value="#{messages['label.prenom']} :" for="prenom" />
       <h:inputText id="prenom" value="#{employe.prenom}" required="true" />
      
       <h:outputLabel value="#{messages['label.nom']} :" for="nom" />
       <h:inputText id="nom" value="#{employe.nom}" required="true" />
       </h:panelGrid>
       </rich:tab>
       <rich:tab label="#{messages['label.ongletCompteUtilisateur']}">
       <h:panelGrid columns="2">
       <h:outputLabel value="#{messages['label.utilisateur']} :" for="utilisateur" />
       <h:inputText id="utilisateur" value="#{compteUtilisateur.username}" required="true" />
      
       <h:outputLabel value="#{messages['label.motDePasse']} :" for="motDePasse" />
       <h:inputSecret id="motDePasse" value="#{compteUtilisateur.password}" required="true" />
      
       <h:outputLabel value="#{messages['label.dateExpirationCompte']} :" for="dateExpirationCompte" />
       <a4j:region>
       <rich:calendar
       id="dateExpirationCompte"
       value="#{compteUtilisateur.dateExpirationCompte}"
       datePattern="#{messages['datePattern']}"
       popup="false"
       locale="#{locale}"
       enableManualInput="true"
       required="true" />
       </a4j:region>
       </h:panelGrid>
       </rich:tab>
       </rich:tabPanel>
      
       <h:commandButton
       id="modifier"
       value="#{messages['label.modifier']}"
       action="#{employeCrud.update}"
       rendered="#{employe.id != null}" />
       <h:commandButton
       id="creer"
       value="#{messages['label.valider']}"
       action="#{employeCrud.create}"
       rendered="#{employe.id == null}" />
       <h:commandButton
       id="annuler"
       value="#{messages['label.annuler']}"
       action="#{employeCrud.annuler}"
       immediate="true" />
      
       </h:form>
       </rich:panel>
       </f:view>
       </ui:define>
      </ui:composition>
      </html>


      I use Richfaces 3.1 with Seam 2.0.0.CR1 and JSF 1.2.

      Thanks in advance.