PrimeFace tag <p:commandButton> nao redireciona a página após a execução do action

Boa Tarde,

Estou usando JSF + Primefaces + Facelets, os componentes do Primefaces estão renderizando corretamente e a tag
<p:commandButton> tambem esta chamando o action correspondente, mas após o processamento do action a página não é “redirecionada”
conforme esta definido no arquivo faces-config.xml.

A principio pensei que fosse algum tipo de erro nas regras de navegação, por isso copiei o botão e usei o <h:commandButton>, como visto abaixo

&lt;ui:define name="content"&gt;
       &lt;h:form&gt;
          Login: &lt;h:inputText value="#{login.usuario}"/&gt; <br/>
          Senha: &lt;p:password value="#{login.senha}" minLength="1" promptLabel="Por favor informe sua senha"/&gt;
          <br/>
          &lt;p:commandButton action="#{login.processarLogin}" value="Processar"/&gt;
          &lt;h:commandButton action="#{login.processarLogin}" value="Processar"/&gt;
       &lt;/h:form&gt;
    &lt;/ui:define&gt;

Se eu clico no botão gerado pelo primefaces ( <p:commandButton> ) o ManageBean é executado mas a página não é redirecionada. :frowning:
Se eu clico em botão gerado pela tag <h:commandButton> o ManagedBean e executado e a página e redirecionada corretamente.

Não há nenhum tipo de report de erro em ambos os casos, mas um redireciona e o outro não. :?

segue o arquivo faces-config.xml

&lt;?xml version='1.0' encoding='UTF-8'?&gt;

&lt;!-- =========== FULL CONFIGURATION FILE ================================== --&gt;

&lt;faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"&gt;

&lt;!--
    &lt;application&gt;
        &lt;view-handler&gt;com.sun.facelets.FaceletViewHandler&lt;/view-handler&gt;
    &lt;/application&gt;
--&gt;


   &lt;navigation-rule&gt;
      

      &lt;navigation-case&gt;
         &lt;from-outcome&gt;loginPage&lt;/from-outcome&gt;
         &lt;to-view-id&gt;/login.xhtml&lt;/to-view-id&gt;
      &lt;/navigation-case&gt;

      &lt;navigation-case&gt;
         &lt;from-outcome&gt;logout&lt;/from-outcome&gt;
         &lt;to-view-id&gt;/index.xhtml&lt;/to-view-id&gt;
      &lt;/navigation-case&gt;
   &lt;/navigation-rule&gt;
    &lt;navigation-rule&gt;
        &lt;from-view-id&gt;/login.xhtml&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;loginOK&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/logado.xhtml&lt;/to-view-id&gt;
        &lt;/navigation-case&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;loginErro&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/login.xhtml&lt;/to-view-id&gt;
        &lt;/navigation-case&gt;
    &lt;/navigation-rule&gt;
&lt;/faces-config&gt;

E o código do managedBean

 /// imports

@ManagedBean(name=&quot;login&quot;)
@RequestScoped
public class AutenticacaoWebMB {

   private String usuario;
   private String senha;
   private Pessoa.TipoPessoa tipoPessoa;

   /** Creates a new instance of AutenticacaoWebMB */
   public AutenticacaoWebMB() {
   }

   public String getSenha() {
      return senha;
   }

   public void setSenha(String senha) {
      this.senha = senha;
   }

   public String getUsuario() {
      return usuario;
   }

   public void setUsuario(String usuario) {
      this.usuario = usuario;
   }

   public TipoPessoa[] getTipoPessoa() {
      return tipoPessoa.values();
   }

   public void setTipoPessoa(TipoPessoa tipoPessoa) {
      this.tipoPessoa = tipoPessoa;
   }

   public String processarLogin() throws Exception {
      String retorno = &quot;loginErro&quot;;
      try {
         // teste
         tipoPessoa = TipoPessoa.FISICA;
         IAutenticacao a = new FactoryPessoa().loadFromCPFCNPJ(usuario, tipoPessoa);

         // valida a senha conforme o tipo de usuario que esta no site
         if (a.validarSenha(senha)) {
            retorno = &quot;loginOK&quot;;
         } else {
            retorno = &quot;loginErro&quot;;
         }
      }
      catch( Exception e ) {
         e.printStackTrace();
         throw e ;
      }
      return retorno;
   }
}

Arquivo Web.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;
   &lt;context-param&gt;
      &lt;param-name&gt;com.sun.faces.verifyObjects&lt;/param-name&gt;
      &lt;param-value&gt;false&lt;/param-value&gt;
   &lt;/context-param&gt;
   &lt;context-param&gt;
      &lt;param-name&gt;com.sun.faces.validateXml&lt;/param-name&gt;
      &lt;param-value&gt;true&lt;/param-value&gt;
   &lt;/context-param&gt;
   &lt;context-param&gt;
      &lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;
      &lt;param-value&gt;client&lt;/param-value&gt;
   &lt;/context-param&gt;
   &lt;context-param&gt;
      &lt;param-name&gt;javax.faces.DEFAULT_SUFFIX&lt;/param-name&gt;
      &lt;param-value&gt;.xhtml&lt;/param-value&gt;
   &lt;/context-param&gt;

   &lt;context-param&gt;
      &lt;param-name&gt;facelets.DEVELOPMENT&lt;/param-name&gt;
      &lt;param-value&gt;false&lt;/param-value&gt;
   &lt;/context-param&gt;
   &lt;context-param&gt;
      &lt;param-name&gt;facelets.SKIP_COMMENTS&lt;/param-name&gt;
      &lt;param-value&gt;true&lt;/param-value&gt;
   &lt;/context-param&gt;

   &lt;!-- Primefaces - retira skin padrao

   &lt;context-param&gt;
      &lt;param-name&gt;primefaces.skin&lt;/param-name&gt;
      &lt;param-value&gt;Dot-Luv&lt;/param-value&gt;
   &lt;/context-param&gt;
--&gt;
   &lt;servlet&gt;
      &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;org.primefaces.resource.ResourceServlet&lt;/servlet-class&gt;
   &lt;/servlet&gt;

   &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/primefaces_resource/*&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;

   &lt;servlet&gt;
      &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
      &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
   &lt;/servlet&gt;

   &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;*.xhtml&lt;/url-pattern&gt;
      &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;
  
   &lt;session-config&gt;
      &lt;session-timeout&gt;
            30
      &lt;/session-timeout&gt;
   &lt;/session-config&gt;
   &lt;welcome-file-list&gt;
      &lt;welcome-file&gt;index.xhtml&lt;/welcome-file&gt;
   &lt;/welcome-file-list&gt;
&lt;/web-app&gt;

Como todo o site vai ser baseado nos skins do Primefaces é necessário que os botões também sejam renderizados e por isso não posso usar a tag <h:commandButton>

Qualquer sujestão é bem vinda…

Att,

Boa tarde …

Para funcionar bastou setar a propriedade ajax=“false”

Att

Com JSF 2.0 outra solução para o seu problema seria redirecionar para a próxima página e não encaminhar (o que faz faces-config).

No seu caso, seria:

public String processarLogin() throws Exception {  
      String retorno...

      (...)
      if (a.validarSenha(senha)) { 
            return "logado.xhtml?faces-redirect=true"; //Irá redirecionar para sua página
      } else {
            return null; //ou return "suaPaginaDeErros.xhtml?faces-redirect=true"; para redirecionar para a página de erro
      }
      (...)
}

Ou então como você fez mesmo, ajax=“false”, que da no mesmo de um <h:commandButton>