[Ajuda] Problema com redirecionamento de páginas através de action em JSF

3 respostas
P

Salve galera, estou com um problema para criar uma página de login em JSF. Postarei os códigos abaixo para que possam me ajudar no que estiverem ao alcance de vocês.

Página login.xhtml:
<h:panelGrid border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse"  width="290" id="Table1">
                                            <h:form id="logar" onsubmit="return valida_login()">
        		    	            <tr>
                                              <tr width="100" height="5">&nbsp;</tr>
                                              <tr widht="100" height="17"><p style="font-size: 13px; color: #999999; padding: 5px 5px 5px 5px;">Para acessar sua conta, favor, preencher os campos abaixo:</p></tr>
        		    	              <td width="100%" height="18">
                                                <p style="padding-left: 10px; margin-left: 18px; height: 16px; background: #c8ae7e; display: block">
        		    	                  <font face="Tahoma" size="2" color="#3f1805">
                                                      <b>E-mail ou apelido:</b>
                                                  </font>
                                                </p>
                                              </td>
                                            </tr>
        		    	            <tr>
        		    	              <td width="100%" align="right">
                                                  <h:inputText value="#{loginController.administradores.emailAdmin}" id="emaillog" styleClass="input" size="48" style="font-family: Tahoma; font-size: 8 pt; border: 1px solid #999999; background-color: #FFFFFF"/>
                                              </td>
        		    	            </tr>
                                            <tr>
                                                <td width="100%" height="5">&nbsp;</td>
                                            </tr>
        		    	            <tr>
        		    	              <td width="100%" height="18">
                                                <p style="padding-left: 10px; margin-left: 18px; height: 16px; background: #c8ae7e; display: block">
                                                <font face="Tahoma" size="2" color="#3f1805">
                                                    <b>Senha:</b>
                                                    </font>
                                                </p>
                                              </td>
        		    	            </tr>
        		    	            <tr>
        		    	              <td width="100%" align="right">
                                                  <h:inputSecret value="#{loginController.administradores.senhaAdmin}" id="senhalog" styleClass="input" size="48" style="font-family: Tahoma; font-size: 8 pt; border: 1px solid #999999; background-color: #FFFFFF"/>
                                              </td>
        		    	            </tr>
        		    	            <tr>
        		    	              <td width="100%" height="10">
        		    	              </td>
        		    	            </tr>
        		    	            <tr>
        		    	              <td width="100%" align="right">
                                                  <h:commandButton  style="margin-right: 2px;" id="btnenviar" type="submit" value="Enviar" action="#{loginController.logar}"></h:commandButton>
                                                  <h:commandButton style="margin-right: 2px;" id="btncancelar" type="reset" value="Cancelar"></h:commandButton>
                                              </td>
        		    	            </tr>
        		    	          </h:form>
        		    	        </h:panelGrid>
Classe LoginController
@ManagedBean
@SessionScoped
public class LoginController implements Serializable{

private Administradores administradores = new Administradores();
private Clientes clientes = new Clientes();
private List<Administradores> listaadm = new ArrayList<Administradores>();
private List<Clientes> listacli = new ArrayList<Clientes>();


    public String getLogar(){
        String returnString = "";
        listaadm = new AdministradoresDao().listar();
        listacli = new ClientesDao().listar();
        if(!listaadm.isEmpty()){
            for(int i=0; i <= listaadm.size(); i++){
                String logadm = ((Administradores)listaadm.get(i)).getEmailAdmin();
                String pswadm = ((Administradores)listaadm.get(i)).getSenhaAdmin();
                    if(administradores.getEmailAdmin().equals("logadm") && administradores.getSenhaAdmin().equals("pswadm")){
                        returnString = "administrador";
                    }
                }
         }else{
                if(!listacli.isEmpty()){
                        for(int j=0; j < listacli.size(); j++){
                            String logcli = ((Clientes)listacli.get(j)).getEmailCli();
                            String pswcli = ((Clientes)listacli.get(j)).getSenhaCli();
                            if(clientes.getEmailCli().equals("logcli") && clientes.getSenhaCli().equals("pswcli")){
                                returnString = "cliente";
                            }
                        }
                    }
                }
            return returnString;
        }


    public Administradores getAdministradores() {
        return administradores;
    }

    public void setAdministradores(Administradores administradores) {
        this.administradores = administradores;
    }

    public Clientes getClientes() {
        return clientes;
    }

    public void setClientes(Clientes clientes) {
        this.clientes = clientes;
    }

}
Método para listar AdministradoresDao
public List<Administradores> listar() {
        Session session = HibernateUtil.getSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Administradores").list();
        t.commit();
        session.close();
        return lista;
    }
Faces-config
<navigation-rule>
    <from-view-id>/login.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{loginController.logar}</from-action>
        <from-outcome>administrador</from-outcome>
        <to-view-id>/administrador.xhmtl</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-action>#{loginController.logar}</from-action>
        <from-outcome>cliente</from-outcome>
        <to-view-id>/cliente.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>
O erro retornado é o seguinte:
com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{loginController.logar}: javax.el.MethodNotFoundException: /login.xhtml @131,174 action="#{loginController.logar}": Method not found: [email removido]()
javax.faces.FacesException: #{loginController.logar}: javax.el.MethodNotFoundException: /login.xhtml @131,174 action="#{loginController.logar}": Method not found: [email removido]()
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        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:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        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:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /login.xhtml @131,174 action="#{loginController.logar}": Method not found: [email removido]()
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        ... 22 more
Caused by: javax.el.MethodNotFoundException: /login.xhtml @131,174 action="#{loginController.logar}": Method not found: [email removido]()
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 23 more

Desde já, sou grato para com quem puder me prestar alguma ajuda.

Att, Pedro Castro.

3 Respostas

narciso.benigno

Olá Pedro,

Bem simples, o tem método no managed bean não precisa ser do tipo get, quando você utiliza action ou action Listener é o próprio nome que você deu ao método, ou seja duas soluçoes:

ou você altera de getLogar para logar o seu método (acho que esta é a solução mais utilizada).

ou no evento action do teu botão você altera a chamada no action por getLogar.

um grande abraço!

P

Olá Narciso, boa tarde!

Agradeço pela resposta,

eu havia feito este teste agora pouco e resolveu meu problema mesmo. É que estou desenvolvendo minha primeira aplicação utilizando JSF e ainda não estou familiarizado como é o funcionamento dos ciclos dele, mas devagar vamos construindo uma boa base. Mas de toda forma o agradeço pela força.

Abraço

narciso.benigno

Normal,

Qualquer coisa posta ai que agente responde, tbm tem o tutorial da sum se quiser dar uma sapiada já que você está usando JEE 6:

http://download.oracle.com/javaee/6/tutorial/doc/

Abraço

Criado 21 de novembro de 2010
Ultima resposta 21 de nov. de 2010
Respostas 3
Participantes 2