JSF + Servlet

1 resposta
marceloborth

Galera, estou com um caso serio!
Não estou conseguindo passar dois simples parâmetros(usuario e senha) do meu jsf para o servlet… estou fazendo o login do meu sistema, e o retorno das variáveis é sempre null… o que está de errado ??

Tela de Login (login.jsp)

<f:view>
            
            <h:form>
                
                <h:panelGrid columns="2" cellspacing="1">
                    
                    <h:outputText escape="false" value="User" />
                    <h:inputText id="user" title="user">
                        <f:validateLength minimum="1" />
                    </h:inputText>

                    <h:outputText escape="false" value="Password: " />
                    <h:inputSecret id="password" title="password" >
                        <f:validateLength minimum="1" />
                    </h:inputSecret>

                    <h:commandButton action="LoginServlet" value="Login" />
                    <h:outputText value=""/>
                    
                </h:panelGrid>
                
            </h:form>
            
        </f:view>

O Servlet (LoginServlet.java)
OBS: Todos os println abaixo no servlet retorna null.

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        System.err.println(request.getParameter("user"));
        System.err.println(request.getSession().getAttribute("user"));
        System.err.println(request.getAttribute("user"));
        

    }

Obrigado…

Marcelo Borth

1 Resposta

gilliard_santos

Oi Marcelo…
seguinte, pelo que eu estou vendo, voce está usando jsf como se fosse jsp/servlet normal. No jsf é muito mais facil voce fazer essas coisas. O seu controler nao é um servlet, e sim um POJO. No seu exemplo, bastaria voce ter uma classe mais ou menos assim

package meupacote;
public class MeuControlador{

private Usuario usuario
// getters and setters

public String minhaAction(){
//faz qualque coisa com o usuario...
if(login e senha OK)
return "SUCESSO";
else
return "ERRO";
}

}

public class Usuario{
private String login;
private String senha;
//getters and setters
}

o seu jsp seria mais ou menos assim

<f:view>
             
             <h:form>
                 
                 <h:panelGrid columns="2" cellspacing="1">
                     
                     <h:outputText escape="false" value="User" />
                     <h:inputText value="#{MeuControl.usuario.login}">
                         <f:validateLength minimum="1" />
                     </h:inputText>
 
                     <h:outputText escape="false" value="Password: " />
                     <h:inputSecret value="#{MeuControl.usuario.senha}" >
                         <f:validateLength minimum="1" />
                     </h:inputSecret>
 
                     <h:commandButton action="#{MeuControl.minhaAction}" value="Login" />
                     <h:outputText value=""/>
                     
                 </h:panelGrid>
                 
             </h:form>
             
         </f:view>

voce teria ainda que mapear no faces-config.xml a sua classe MeuControlador para que possa ser acessada dentro do jsp pelo nome MeuControl como tá no exemplo.

...
<managed-bean>
  <managed-bean-name>MeuControl</managed-bean-name>
  <managed-bean-class>meupacote.MeuControlador</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
...

O JSF irá automaticamente povoar os atributos do bean Usuario que está dentro do seu managed bean, por isso voce precisa definir os getters and setters de tudo. Note também que o managed bean é um pojo, e voce chama um método qualquer (seguindo apenas um padrao de assinatura) dentro do seu jsp (em momento algum voce usa doGet ou doPost).

Uma action pode ser void ou retornar uma String. Voce usa o retorno para indicar a navegacao das paginas. Voja como mapear…

...
<navigation-rule>
      <from-view-id>*</from-view-id>
      <navigation-case>
         <from-outcome>SUCESSO</from-outcome>
         <to-view-id>/paginaDeSucesso.jsp</to-view-id>
      </navigation-case>
 <navigation-case>
         <from-outcome>ERRO</from-outcome>
         <to-view-id>/paginaDeErro.jsp</to-view-id>
      </navigation-case>
<navigation-rule>
...

O JSF vai pegar a String que voce retornou na sua action e vai direcionar para a pagina certa. Caso voce retorne uma String que nao é encontrada no faces-config.xml, uma String vazia ou null, vai funcionar como se voce definisse sua action como void. Nesse caso apos a execucao, vai voltar para a mesma página.

o from-view-id da navigation-rule serve para voce indicar qual a pagina de origem da sua action… nesse caso, com * pode vir de qualquer pagina.
Procure por exemplos e tutoriais na internet para entender melhor o funcionamento do JSF, talvez possa te ajudar.

Qualquer coisa posta de novo aqui.
falow…

Criado 23 de setembro de 2006
Ultima resposta 23 de set. de 2006
Respostas 1
Participantes 2