1 Reply Latest reply on Aug 13, 2008 2:39 PM by jfcho

    Richfaces 3.1.5 + SUN-RI 1.1 error

    jfcho

      Hello,

      I am new at the forum, and I have been using Richfaces 3.2.1 for a few month.

      However, I was forced to develop a application for Websphere Application Server 6.1, and therefore, can't use the JSF 1.2 specs.

      So, i migrated the app to SUN-RI 1.1 + RichFaces 3.1.5 + spring 2.5.5 + sitemesh 2.3.

      Now, I am having the following problem: although the page is correctly rendered, when I try to click in any A4J:commandLink, I get the following exception:

      java.lang.ClassCastException: [Ljava.lang.Object;
      at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1114)
      at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1007)
      at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1019)
      at org.ajax4jsf.application.AjaxStateManager.restoreView(AjaxStateManager.java:246)

      could anyone help me with this one?

      Thanks for the attention

      Jorge Cho

        • 1. Re: Richfaces 3.1.5 + SUN-RI 1.1 error
          jfcho

          Here is the exact stackTrace
          --------------------------------------------
          SEVERE: Servlet.service() for servlet Faces Servlet threw exception
          java.lang.ClassCastException: [Ljava.lang.Object;
          at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1114)
          at javax.faces.component.UICommand.restoreState(UICommand.java:264)
          at org.ajax4jsf.component.html.HtmlAjaxCommandLink.restoreState(HtmlAjaxCommandLink.java:1546)
          at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1007)
          at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1019)
          at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1019)
          at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1019)
          at org.ajax4jsf.application.AjaxStateManager.restoreView(AjaxStateManager.java:246)
          at com.sun.faces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:228)
          at org.ajax4jsf.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116)
          at org.ajax4jsf.application.AjaxViewHandler.restoreView(AjaxViewHandler.java:159)
          at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:157)
          at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
          at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
          at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
          at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
          at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
          at java.lang.Thread.run(Thread.java:595)
          ------------------------------------------------------

          and here is the code of the JSP:

          ------------------------------------------------------
          <%@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/a4j" prefix="a4j"%>
          <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
          <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>



          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          MAP - Módulo de Aplicação de Provas
















          function init_dw_Scroll() {
          var wndo1 = new dw_scrollObj('historico', 'lyr1');
          wndo1.setUpScrollbar("dragBar1", "track1", "v", 1, 1);

          wndo1.setUpScrollControls('scrollbar1');

          scrollerArrowUp = document.getElementById('up1');
          scrollerArrowUp.onclick= function(){ return false;};
          scrollerArrowUp.onmouseover= function(){dw_scrollObj.initScroll('historico','up');};
          scrollerArrowUp.onmouseout= function(){dw_scrollObj.stopScroll('historico')};
          scrollerArrowUp.onmousedown= function(){dw_scrollObj.doubleSpeed('historico');};
          scrollerArrowUp.onmouseup= function(){dw_scrollObj.resetSpeed('historico');};

          scrollerArrowDown = document.getElementById('down1');
          scrollerArrowDown.onclick= function(){ return false;};
          scrollerArrowDown.onmouseover= function(){dw_scrollObj.initScroll('historico','down');};
          scrollerArrowDown.onmouseout= function(){dw_scrollObj.stopScroll('historico')};
          scrollerArrowDown.onmousedown= function(){dw_scrollObj.doubleSpeed('historico');};
          scrollerArrowDown.onmouseup= function(){dw_scrollObj.resetSpeed('historico');};

          }

          // if necessary objects exists link in the style sheet and call the init function onload
          if ( document.getElementById && document.getElementsByTagName ) {

          dw_writeStyleSheet('js/css/scroll_multi.css');
          //addLoadEvent(init_dw_Scroll);
          }




          <f:view>

          <h:form>

          <a4j:poll
          id= "beeper"
          interval="60000"
          action="#{provaBean.decrementaTempoRestante}"
          reRender="tempoRestante"

          enabled="true"
          >
          <a4j:actionparam value="#{provaBean.numeroInscricao}"
          assignTo="#{provaBean.numeroInscricao}" />
          </a4j:poll>
          </h:form>
          <h:form id="formProva">

          <h:inputHidden id="param0" value="#{provaBean.numeroInscricao}"></h:inputHidden>





          Numero de Inscrição:<h:outputLabel for="test"
          value="#{provaBean.candidato.nroInscricao}"></h:outputLabel>
          Candidato: <h:outputLabel for="test"
          value="#{provaBean.candidato.nomeCandidato}"></h:outputLabel>





          Questões: <h:outputLabel value="#{provaBean.prova.questoes}" />


          Respondidas:
          <a4j:region>
          <h:outputText id="nroQuestoesResp" style="font-size:12px;"
          value="#{provaBean.questoesRespondidas}" />
          </a4j:region>

          Horário InÃcio:<h:outputLabel
          value="#{provaBean.prova.horaInicio}">
          <f:convertDateTime pattern="HH:mm" />
          </h:outputLabel>
          Horário Términio:<h:outputLabel
          value="#{provaBean.prova.horaTermino}">
          <f:convertDateTime pattern="HH:mm" />
          </h:outputLabel>
          Tempo Restante:<h:outputLabel
          value="#{provaBean.prova.tempoRestante}" id="tempoRestante" styleClass="#{provaBean.prova.corTempoRestante}"/>




          <rich:panel id="ProvaMaterias" style="border-style:none;">
          <h:inputHidden id="param1" value="#{provaBean.indiceMateria}"></h:inputHidden>
          <%--------------------------------------------------------------------------------------------------------------------
          script gerado para inserir o valor de indiceMateria,
          do bean materiaBean,
          para o atributo indiceMateria, mas do bean ProvaBean,
          uma vez que existem limitacoes que impossibilitam
          o uso direto de atribuicao, salvo a arquitetura

          --------------------------------------------------------------------------------------------------------------------%>
          <f:verbatim>

          '</f:verbatim>
          <f:verbatim>'
          function updateParam1(){
          param = document.getElementById('formProva:param1');
          param.value = '<h:outputText value="#{materiaBean.indiceMateria}" />';

          }
          '</f:verbatim>
          <f:verbatim>'












          </f:verbatim>
          <a4j:commandLink action="#{materiaBean.carregarAnterior}"
          reRender="ProvaMaterias, painel"

          oncomplete="updateParam1()"
          >
          <f:verbatim>
          &lt;
          </f:verbatim>
          <a4j:actionparam value="#{materiaBean.numeroInscricao}"
          assignTo="#{materiaBean.numeroInscricao}" />
          <a4j:actionparam value="#{materiaBean.indiceMateria}"
          assignTo="#{materiaBean.indiceMateria}" />
          </a4j:commandLink>
          <f:verbatim>

          </f:verbatim>
          <a4j:repeat var="materia" value="#{materiaBean.listaMateria}">
          <f:verbatim>

          </f:verbatim>
          <a4j:region>
          <a4j:commandLink action="#{materiaBean.selecionarMateria}"
          value="#{materia.descricao}" reRender="ProvaMaterias, painel"
          oncomplete="updateParam1()">
          <a4j:actionparam name="teste1" value="#{materia.indice}"
          assignTo="#{materiaBean.indiceMateria}" />
          <a4j:actionparam name="teste2"
          value="#{materiaBean.numeroInscricao}"
          assignTo="#{materiaBean.numeroInscricao}" />
          </a4j:commandLink>
          </a4j:region>
          <f:verbatim>

          </f:verbatim>
          <h:outputText value="#{materia.separador}"></h:outputText>
          </a4j:repeat>

          <f:verbatim>

          </f:verbatim>
          <a4j:commandLink action="#{materiaBean.carregarProxima}"
          reRender="ProvaMaterias, painel"
          oncomplete="updateParam1()">
          <f:verbatim>
          &gt;
          </f:verbatim>
          <a4j:actionparam value="#{materiaBean.numeroInscricao}"
          assignTo="#{materiaBean.numeroInscricao}" />
          <a4j:actionparam value="#{materiaBean.indiceMateria}"
          assignTo="#{materiaBean.indiceMateria}" />

          </a4j:commandLink>
          <f:verbatim>




          </f:verbatim>
          </rich:panel>


          <rich:panel id="painel" style="border-style:none;" >

          <h:inputHidden id="param2" value="#{provaBean.indiceQuestao}"></h:inputHidden>
          <%--------------------------------------------------------------------------------------------------------------------
          script gerado para inserir o valor de indiceQuestao,
          do bean QuestaoBean,
          para o atributo indiceQuestao, mas do bean ProvaBean,
          uma vez que existem limitacoes que impossibilitam
          o uso direto de atribuicao, salvo a arquitetura

          --------------------------------------------------------------------------------------------------------------------%>
          <f:verbatim>

          '</f:verbatim>
          <f:verbatim>'
          function updateParam2(){
          param = document.getElementById('formProva:param2');
          param.value = '<h:outputText value="#{questaoBean.indiceQuestao}" />';

          }
          '</f:verbatim>
          <f:verbatim>'

          </f:verbatim>
          <h:inputHidden id="param3" value="#{provaBean.resultado}"></h:inputHidden>
          <f:verbatim>

          '</f:verbatim>
          <f:verbatim>'
          function updateParam3(){
          param = document.getElementById('formProva:param3');
          param.value = '<h:outputText value="#{provaBean.resultado}" />';

          }
          '</f:verbatim>
          <f:verbatim>'


          </f:verbatim>
          <rich:messages
          layout="table" ajaxRendered="true"
          >
          <f:facet name="errorMarker">

          </f:facet>
          </rich:messages>
          <f:verbatim>

          </f:verbatim>
          <rich:dataTable value="#{questaoBean.listaDummy}" id="dataTableQuestao"
          rendered="#{questaoBean.iniciado}">
          <rich:column style="width:500;">
          <f:verbatim>




          </f:verbatim>
          <h:outputLabel style="font-size:17px;border-style:none;"
          value="Questão número #{questaoBean.indiceQuestao}"></h:outputLabel>
          <f:verbatim>




          </f:verbatim>
          <h:outputText

          value="Carta: #{questaoBean.questaoAtual.carta}"
          rendered="#{questaoBean.questaoAtual.hasCarta}"
          ></h:outputText>
          <f:verbatim>









          </f:verbatim>
          <h:outputText value="#{questaoBean.questaoAtual.enunciado}"></h:outputText>
          <f:verbatim>

          </f:verbatim>

          <a4j:region>
          <h:selectOneRadio id="radioComHist" value="#{questaoBean.escolhido}" layout="pageDirection"
          styleClass="questaoLabel">
          <f:selectItems id="radioComHist1" value="#{questaoBean.listaAlternativas}"
          />
          <a4j:support id="radioComHist2" event="onclick"
          action="#{questaoBean.selecionaRadio}" reRender="painel, nroQuestoesResp">
          <a4j:actionparam name="teste110"
          value="#{questaoBean.numeroInscricao}"
          assignTo="#{questaoBean.numeroInscricao}" />
          <a4j:actionparam name="teste120"
          value="#{questaoBean.indiceMateria}"
          assignTo="#{questaoBean.indiceMateria}" />
          <a4j:actionparam name="teste130"
          value="#{questaoBean.indiceQuestao}"
          assignTo="#{questaoBean.indiceQuestao}" />
          </a4j:support>
          </h:selectOneRadio>
          <%--------------------------------------------------------------------------------------------------------------------
          script gerado para inserir a letra da questao antes
          da radio, uma vez que a selectOneRadio nao permite a
          insercao de elementos sem que haja quebra de linhas entre
          a composicao da radio e do label que vem em frente da radio.


          --------------------------------------------------------------------------------------------------------------------%>
          <f:verbatim>

          '</f:verbatim>
          <f:verbatim>'
          var letrasAlternativas = '<h:outputText value="#{questaoBean.listaLetrasAlternativas}" />';
          var tableradio = document.getElementById('formProva:dataTableQuestao:0:radioComHist');

          function injetarLetrasAlternativas(table,lista){
          //alert(table.cells+'\n'+table.rows);
          if (table.rows != null ){
          var tempLetras = lista.split(',');
          for (i = 0 ; i < tableradio.rows.length && i < tempLetras.length ; i++){
          var cell = table.rows.getElementsByTagName('td')[0];
          var tempSpan = ''+tempLetras
          +'';
          cell.innerHTML = tempSpan + cell.innerHTML;
          }

          }
          }
          injetarLetrasAlternativas(tableradio,letrasAlternativas);
          '</f:verbatim>
          <f:verbatim>'

          </f:verbatim>
          </a4j:region>


          </rich:column>
          <rich:column rendered="#{questaoBean.questaoAtual.hasHistorico}">
          <f:verbatim>
          Histórico








          </f:verbatim>
          <h:outputText value="#{questaoBean.questaoAtual.historico}"></h:outputText>
          <f:verbatim>








          <!-- border attribute added to reduce support questions on the subject.

          If you like valid strict markup, remove and place a img {border:none;} spec in style sheet -->












          init_dw_Scroll() ;





          </f:verbatim>
          </rich:column>
          </rich:dataTable>


          <f:verbatim>



          </f:verbatim>
          <a4j:commandLink action="#{questaoBean.carregarAnterior}"
          reRender="painel" rendered="#{questaoBean.iniciado}"
          oncomplete="updateParam2()">
          <f:verbatim>
          &lt;
          </f:verbatim>
          <a4j:actionparam value="#{questaoBean.numeroInscricao}"
          assignTo="#{questaoBean.numeroInscricao}" />
          <a4j:actionparam value="#{questaoBean.indiceMateria}"
          assignTo="#{questaoBean.indiceMateria}" />
          <a4j:actionparam value="#{questaoBean.indiceQuestao}"
          assignTo="#{questaoBean.indiceQuestao}" />
          </a4j:commandLink>
          <f:verbatim>

          </f:verbatim>
          <a4j:repeat var="questao" value="#{questaoBean.listaQuestoes}"
          rendered="#{questaoBean.iniciado}" >
          <f:verbatim>

          </f:verbatim>
          <a4j:region>
          <a4j:commandLink action="#{questaoBean.selecionaQuestao}"
          value="#{questao.indice}" reRender="painel"
          styleClass="#{questao.isRespondido}"
          oncomplete="updateParam2()">
          <a4j:actionparam name="teste3"
          value="#{questaoBean.numeroInscricao}"
          assignTo="#{questaoBean.numeroInscricao}" />
          <a4j:actionparam name="teste4"
          value="#{questaoBean.indiceMateria}"
          assignTo="#{questaoBean.indiceMateria}" />
          <a4j:actionparam name="teste5" value="#{questao.indice}"
          assignTo="#{questaoBean.indiceQuestao}" />
          </a4j:commandLink>
          </a4j:region>
          <f:verbatim>

          </f:verbatim>

          </a4j:repeat>
          <f:verbatim>

          </f:verbatim>
          <a4j:commandLink action="#{questaoBean.carregarProxima}"
          reRender="painel" rendered="#{questaoBean.iniciado}"
          oncomplete="updateParam2()">
          <f:verbatim>
          &gt;
          </f:verbatim>
          <a4j:actionparam value="#{questaoBean.numeroInscricao}"
          assignTo="#{questaoBean.numeroInscricao}" />
          <a4j:actionparam value="#{questaoBean.indiceMateria}"
          assignTo="#{questaoBean.indiceMateria}" />
          <a4j:actionparam value="#{questaoBean.indiceQuestao}"
          assignTo="#{questaoBean.indiceQuestao}" />
          </a4j:commandLink>
          <f:verbatim>







          </f:verbatim>
          </rich:panel>



          <a4j:commandLink action="#{provaBean.confirmarEncerrarProva}"
          reRender = "painel, botoes" oncomplete="updateParam3();">
          <f:verbatim>
          Encerrar Prova
          </f:verbatim>
          </a4j:commandLink>





          <a4j:region id="btnChamaFiscal">
          <a4j:commandLink
          action="#{provaBean.mudaBeep}" reRender="btnChamaFiscal, repetidor"
          >
          <f:verbatim>

          Fiscal

          </f:verbatim>
          <a4j:actionparam value="#{provaBean.numeroInscricao}"
          assignTo="#{provaBean.numeroInscricao}" />
          </a4j:commandLink>

          </a4j:region>

















          </h:form>
          <a4j:form >
          <a4j:region >
          <a4j:poll id="repetidor" interval="1500" action="#{provaBean.testaChamaFiscal}"
          oncomplete="fimChamaFiscal('#{provaBean.chamaFiscal}');"
          binding="#{provaBean.beeper}" reRender="btnChamaFiscal"
          enabled="false"
          >
          <a4j:actionparam value="#{provaBean.numeroInscricao}"
          assignTo="#{provaBean.numeroInscricao}" />
          <a4j:actionparam value="#{provaBean.chamaFiscal}"
          assignTo="#{provaBean.chamaFiscal}" />

          </a4j:poll>
          </a4j:region>
          </a4j:form>
          </f:view>



          --------------------------------

          and here are the .xml files:

          Web.xml
          -------------------------------
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

          <display-name>AnacMAP</display-name>
          <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
          </welcome-file-list>
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>
          /WEB-INF/contexto/resources.xml
          /WEB-INF/contexto/persistence.xml
          /WEB-INF/contexto/service.xml
          </param-value>
          </context-param>
          <context-param>
          <param-name>org.richfaces.SKIN</param-name>
          <param-value>plain</param-value>
          </context-param>
          <context-param>
          <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
          <param-value>server</param-value>
          </context-param>

          <display-name>RichFaces Filter</display-name>
          <filter-name>richfaces</filter-name>
          <filter-class>org.ajax4jsf.Filter</filter-class>


          <filter-name>sitemesh</filter-name>
          <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>

          <filter-mapping>
          <filter-name>richfaces</filter-name>
          <servlet-name>Faces Servlet</servlet-name>
          REQUEST
          FORWARD
          INCLUDE
          </filter-mapping>
          <filter-mapping>
          <filter-name>sitemesh</filter-name>
          <url-pattern>*.jsf</url-pattern>
          </filter-mapping>


          <listener-class>br.gov.anac.sapo.web.context.ContextLoaderListener</listener-class>


          <servlet-name>Faces Servlet</servlet-name>
          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
          <load-on-startup>1</load-on-startup>

          <servlet-mapping>
          <servlet-name>Faces Servlet</servlet-name>
          <url-pattern>*.jsf</url-pattern>
          </servlet-mapping>
          <login-config>
          <auth-method>BASIC</auth-method>
          </login-config>

          </web-app>
          -------------------------------

          Faces-config.xml
          ------------------------------
          <?xml version="1.0" encoding="UTF-8"?>

          <faces-config
          >



          <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
          <locale-config>
          <default-locale>pt_BR</default-locale>
          <supported-locale>pt_BR</supported-locale>
          </locale-config>
          <message-bundle>recursos</message-bundle>


          <!-- ************************************************************
          managed beans
          *************************************************************** -->
          <managed-bean>
          <managed-bean-name>provaBean</managed-bean-name>
          <managed-bean-class>br.gov.anac.sapo.realizarProva.apresentacao.ProvaBean</managed-bean-class>
          <managed-bean-scope>request</managed-bean-scope>
          <managed-property>
          <property-name>candidatoFacade</property-name>
          #{candidatoFacade}
          </managed-property>
          <managed-property>
          <property-name>provaFacade</property-name>
          #{provaFacade}
          </managed-property>
          <managed-property>
          <property-name>materiaBean</property-name>
          #{materiaBean}
          </managed-property>

          </managed-bean>

          <managed-bean>
          <managed-bean-name>materiaBean</managed-bean-name>
          <managed-bean-class>br.gov.anac.sapo.realizarProva.apresentacao.MateriaBean</managed-bean-class>
          <managed-bean-scope>request</managed-bean-scope>
          <managed-property>
          <property-name>provaFacade</property-name>
          #{provaFacade}
          </managed-property>
          <managed-property>
          <property-name>questaoBean</property-name>
          #{questaoBean}
          </managed-property>
          </managed-bean>

          <managed-bean>
          <managed-bean-name>questaoBean</managed-bean-name>
          <managed-bean-class>br.gov.anac.sapo.realizarProva.apresentacao.QuestaoBean</managed-bean-class>
          <managed-bean-scope>request</managed-bean-scope>
          <managed-property>
          <property-name>provaFacade</property-name>
          #{provaFacade}
          </managed-property>
          </managed-bean>

          <!-- ************************************************************
          Navigation Rules
          *************************************************************** -->


          <navigation-rule>
          <display-name>login</display-name>
          <from-view-id>/confirmarCandidato.jsp</from-view-id>
          <navigation-case>
          <from-outcome>confirma</from-outcome>
          <to-view-id>/confirmarCandidato2.jsp</to-view-id>
          </navigation-case>
          </navigation-rule>

          <navigation-rule>
          <display-name>cancelar</display-name>
          <from-view-id>/confirmarCandidato2.jsp</from-view-id>
          <navigation-case>
          <from-outcome>cancela</from-outcome>
          <to-view-id>/confirmarCandidato.jsp</to-view-id>
          </navigation-case>
          <navigation-case>
          <from-outcome>inicia</from-outcome>
          <to-view-id>/realizarProva.jsp</to-view-id>
          </navigation-case>
          </navigation-rule>

          <navigation-rule>
          <display-name>prova</display-name>
          <from-view-id>/realizarProva.jsp</from-view-id>
          <navigation-case>
          <from-outcome>encerra</from-outcome>
          <to-view-id>/resultadoFinal.jsp</to-view-id>
          </navigation-case>
          <navigation-case>
          <from-outcome>confirma</from-outcome>
          <to-view-id>/finalizarProva.jsp</to-view-id>
          </navigation-case>
          </navigation-rule>

          <navigation-rule>
          <display-name>confirmacao</display-name>
          <from-view-id>/finalizarProva.jsp</from-view-id>
          <navigation-case>
          <from-outcome>volta</from-outcome>
          <to-view-id>/realizarProva.jsp</to-view-id>
          </navigation-case>
          <navigation-case>
          <from-outcome>encerra</from-outcome>
          <to-view-id>/resultadoFinal.jsp</to-view-id>
          </navigation-case>
          </navigation-rule>


          <converter-id>conversorLong</converter-id>
          <converter-class>
          br.gov.anac.sapo.commons.support.converter.ConversorLong
          </converter-class>



          <converter-id>conversorInteger</converter-id>
          <converter-class>
          br.gov.anac.sapo.commons.support.converter.ConversorInteger
          </converter-class>







          </faces-config>

          ------------------------------

          Any1?

          thx for the attention