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
<ui:define name="content">
<h:form>
Login: <h:inputText value="#{login.usuario}"/> <br/>
Senha: <p:password value="#{login.senha}" minLength="1" promptLabel="Por favor informe sua senha"/>
<br/>
<p:commandButton action="#{login.processarLogin}" value="Processar"/>
<h:commandButton action="#{login.processarLogin}" value="Processar"/>
</h:form>
</ui:define>
Se eu clico no botão gerado pelo primefaces ( <p:commandButton> ) o ManageBean é executado mas a página não é redirecionada.
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
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<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">
<!--
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
-->
<navigation-rule>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>loginOK</from-outcome>
<to-view-id>/logado.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>loginErro</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
E o código do managedBean
/// imports
@ManagedBean(name="login")
@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 = "loginErro";
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 = "loginOK";
} else {
retorno = "loginErro";
}
}
catch( Exception e ) {
e.printStackTrace();
throw e ;
}
return retorno;
}
}
Arquivo Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>facelets.SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<!-- Primefaces - retira skin padrao
<context-param>
<param-name>primefaces.skin</param-name>
<param-value>Dot-Luv</param-value>
</context-param>
-->
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
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,