Como utilizar Bean na Servlet

Estou utilizando a seguinte estrutura JSP, Servlets e JavaBeans.

Estou tentando passar o Bean que utilizo na minha JSP para o Servlet (Que é a minha camada de Controle),
mas não estou conseguindo, o meu Bean está com as propriedades nulas.

O que devo fazer???

:?: :?:

Posta o teu código para a gente dar uma olhada.

No jsp:

<jsp:useBean id="aluno" class="br.escola.Aluno" scope="session" />

No servlet:

HttpSession session = request.getSession();

Aluno aluno = new Aluno();
aluno = (Aluno)session.getAttribute("aluno");

vansol,

No jsp, vc precisa preencher os atributos do bean.

Se os atributos da seu bean, tiverem o mesmo nome dos campos do seu formulario html, vc pode preencher da seguinte maneira:

<jsp:useBean id="aluno" class="br.escola.Aluno" scope="session">
	<jsp:setProperty name="aluno" property="*"/>
</jsp:useBean>

Se os atributos nao tiverem o mesmo nome, vc precisara repetir a linha :

<jsp:setProperty name="aluno" property="nome_da_propriedade"/>

para cada campo do formulario.

Raguiar,

estou usando o setProperty do Bean, e todos os meus campos da JSP estão com o mesmo nome do meu Bean.

Percebi que da primeira vez que ocorre o submit na tela, ele manda valores nulls para o servlet, mas da segunda vez que clico no botão de submit ele manda os valores que preenchi da primeira vez.

Nao estou conseguindo pensar no que pode estar causando este problema.

Ja desenvolvi varias aplicações uilizando esta estrutura e nunca tive este tipo de problema.

De qq forma segue um trecho de codigo de um cadastro de um sistema que desenvolvi utilizando esta estrtutura e esta funcionando:

No JSP:

<jsp:useBean id="p_indFin" class="modelo.IndicFinanceiro" scope="session">
    <jsp:setProperty name="p_indFin" property="*"/>
</jsp:useBean>

No servlet:

HttpSession  sessao = req.getSession(true);
IndicFinanceiro v_ind = (IndicFinanceiro)sessao.getAttribute("p_indFin");

Bean:


package modelo;

public class IndicFinanceiro {
    private String indice;
    private float variacao;
    private float compra;
    private float venda;
	
    public IndicFinanceiro(){

    }

    public String getIndice(){
             return indice; 
    }//fim getIndice

    public float getVariacao(){
            return variacao;
    } // fim getVariacao

    public float getCompra(){
             return compra;
    } // fim getCompra

    public float getVenda(){
            return venda;
    } // fim getVenda

    public void setIndice(String si){
            indice = si;
    } // fim setIndice

    public void setVariacao(float fa){
           variacao  = fa;
    }// fim setVariacao

    public void setCompra(float fb){
          compra  = fb;
    }// fim setCompra

   public void setVenda(float fc){
         venda  = fc;
    }// fim setVenda

} // Fim IndicFinanceiro

E por fim, os campos do meu formulario HTML estao com os mesmos nomes do Bean (indice, variacao, compra, venda)
Espero que tenha conseguido ajudar em algo.

Ricardo,

Estou fazendo como vc fez.

O meu código está assim:

<jsp:useBean id="aluno" class="br.escola.Aluno" scope="session"> 
   <jsp:setProperty name="aluno" property="*"/> 
</jsp:useBean> 

meu formulário:

<form name="formalu" method="POST" action="./ServletAluno" > 
.
. aqui vai estar todos os meu campos e o botão de submit
.
</form>

Está ocorrendo o seguinte, ao clicar no botão ele dá o submit na tela, vai até o servlet e lá o meu Bean encontra-se com os valores null.

Bom, quando ele volta pra JSP ele atribui os valores do bean.

Ou seja, ele atribui o bean só depois que ele voltou do servlet.

Então, provavelmente é isso que está ocorrendo, talvez o meu Bean esteja no lugar errado ou então outra coisa.

Por favor, help me.

Cara,

Tenta fazer o seguinte:

Altere o seu formulario para:

<form name="formalu" method="POST" action="nome_deste_jsp.jsp?flag=ok" > 
. 
. aqui vai estar todos os meu campos e o botão de submit 
. 
</form> 

Com isso, qdo vc efetuar o submit do formulario, a propria pagina sera “chamada”.

Abaixo do trecho que ja existe na sua pagina:

<jsp:useBean id="aluno" class="br.escola.Aluno" scope="session"> 
   <jsp:setProperty name="aluno" property="*"/> 
</jsp:useBean> 

Coloque o seguinte trecho de codigo:

  <% 
  String v_flag = request.getParameter("flag"); 

   if(v_flag.equals("ok")){%>
     <jsp:forward page="/ServletAluno"/>
          <jsp:param name="teste" value="entrou"/>
     </jsp:forward>
   <% }%>

Resumindo: Depois de digitar os dados e dar submit, o proprio jsp sera chamado passando “flag=ok”. Entao este flag sera recuperado e se for “ok”, ou seja, tiver vindo a partir do submit, fara um “forward” para o seu servlet. No servlet, verifique se os dados do formulario chegaram corretamente. Se funcionar, descarte o parametro teste que foi passado para o servlet. Caso contrario, verifico se o parametro teste esta chegando no servlet com o valor “entrou”.

Espero que nao tenha sido confuso e te ajude

Ricardo,

Muito obrigada pela ajuda, funcionou o que eu queria.

Só não sei porque a tela teve este comportamento.

Valeu.

:smilecolros:

Vc estava fazendo um submit para outra página certo?
Ao fazer isso vc não volta para a página onde vc está setando a sessão…
os comandos rodam no servidor. ou seja, vc apenas seta a sessão na segunda vez que vc acessa a página!

não sei se vc me entendeu, mas tudo bem…

Se estiver errado, por favor me corrigam ^^

flw