JSP chama Servlet retorna JSP [Resolvido]

O meu problema é o seguinte:
Quero que ao acessar um jsp um servlet seja chamado imediatamente… Esse servlet apenas executa uma função que retorna uma List…

Quero usar essa list no jsp que chamou o servlet, em um option, que cresce de acordo com a lista, para que apareca uma lista dos objetos pesquisados no servlet para eu selecionar… deu pra entender? ehauheauea

Sei que tem algo a ver com UseBean, mas nao entendi direito como utilizar ele…

Vlw,
Felipe Gatti.

Cara vc quer um “dropdown” de uma lista??
se for isso eu ja fiz isso desse jeito:

<h:selectOneMenu value="#{notaFiscalBean.idprotudo}">
						<f:selectItems value="#{produtoBean.produtos}" var="produto"
						itemValue="#{produto.id}" itemLabel="#{produto.nome}" />	

</h:selectOneMenu>

E o Bean:

	public List<Produto> getProdutos(){
		if(produtos ==null){
			System.out.println("Montando lista de produtos...");
			produtos = new DAO<Produto>(Produto.class).listaTodos();
		}
		return produtos;
	}

Cara, a maneira mais fácil seria a tua Servlet chamar a tua JSP.
Assim tu pode fazer tua lógica e setar os atributos da requisição na Servlet e depois dar um forward pra tua JSP.

Aqui um exemplo de forward:

RequestDispatcher dispatcher = request.getRequestDispatcher("pagina.jsp");
dispatcher.forward(request, response);

E aqui um exemplo mais completo

[quote=ArthurTurtle]Cara vc quer um “dropdown” de uma lista??
se for isso eu ja fiz isso desse jeito:

<h:selectOneMenu value="#{notaFiscalBean.idprotudo}">
						<f:selectItems value="#{produtoBean.produtos}" var="produto"
						itemValue="#{produto.id}" itemLabel="#{produto.nome}" />	

</h:selectOneMenu>

E o Bean:

public List<Produto> getProdutos(){ if(produtos ==null){ System.out.println("Montando lista de produtos..."); produtos = new DAO<Produto>(Produto.class).listaTodos(); } return produtos; } [/quote]

Isso mesmo, uma dropdown de uma lista!
Mas no caso, o maior problema é que eu chamo o servlet no JSP, o servlet me computa essa lista…
Como voltar com ela para o JSP?

Nao entendi direito… o Bean ficaria no servlet e calcularia tudo pra mim? e utilizaria o #{} no jsp?
Porque usa <f:selectItems value="#{produtoBean.produtos}"
no lugar de <f:selectItems value="#{produtoBean.getProdutos}"?

Sua duvida seria como fazer para “popular” um combo apartir de uma pesquisa e atualiza-lo sem precisar atualizar a página inteira?

Se estiver usando apenas JSP e Servlets, te aconselho a dar uma olhada no FrameWork DWR.

Se for com JSF, o amigo ArthurTurtle já deu a solução, eu só adicionaria um A4J para dar reRender no selectOneMenu.

UseBean , JSF, JSTL…
to entendendo nada! euahuehauehae
o netbeans nao deixou eu usar o :

   1. <h:selectOneMenu value="#{notaFiscalBean.idprotudo}">  
   2.                         <f:selectItems value="#{produtoBean.produtos}" var="produto"  
   3.                         itemValue="#{produto.id}" itemLabel="#{produto.nome}" />   
   4.   
   5. </h:selectOneMenu>  

deu problema no #{…} mesmo depois de adicionar a biblioteca JSF nele…

arthur, teria como me mandar os codigos das classes que voce enviou os trechos? :smiley:

obrigado a todos ^^

Quais tecnologias você está utilizando?

Você declarou as tagLibs na sua página para utilizar as tags do JSF?

Dependendo do que você está fazendo, não compensa implementar JSF só por causa de um combo.

Pelo que entendi você está usando apenas JSP e Servlets, nada de JSF, não é?
E o que você quer fazer é ter uma combo na sua JSP, no qual as opções são definidas a partir de uma lista que foi populada em uma Servlet?

O mais fácil seria você chamar a Servlet antes de exibir a página JSP, para poder setar na requisição as variáveis que você vai precisar.

Esse UseBean que você comentou, se for o jsp:useBean, serve para que você acesse na sua página JSP as propriedades de um objeto que foi setado na requisição pela sua Servlet.

No seu caso será necessário apenas setar uma variável(lista de alguma coisa) na requisição e dar um forward para a sua página JSP.

Ex:

Na Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	List<Produto> listaProdutos = new ArrayList<Produto>();
	
	// algum código que preenche a lista de produtos

	request.setAttribute("listaProdutos", listaProdutos);
	
	RequestDispatcher view = request.getRequestDispatcher("pagina.jsp");
	view.forward(request, response);
}

Na JSP:

<select name="produto" id="produto">
	<!-- Utilizando a tag core do JSTL -->
	<c:forEach var="produto" items="${listaProdutos}">
		<option value="${produto.codigo}">${produto.descricao}</option>
	</c:forEach>
</select>

Para acessar a página JSP, basta acessar a Servlet que esta irá redirecionar para a página.

Para fazer o que você disse, de chamar uma Servlet quando a JSP for carregada, você teria que utilizar Ajax.
Como o Dan falou, você poderia utilizar DWR para fazer isso.
Mas te aconselho a aprender primeiro o básico de JSP e Servlet, utilizando apenas JSTL e JSP EL(Expression Language).

Isso tuliomonteazul!
É que to começando com web agora, estou usando apenas JSP e Servlet mesmo, nao sei nada de JSF, ajax e afins…

Entendi melhor o seu codigo agora mas ainda nao consegui hehe
Nao consegui fazer o servlet redirecionar para a JSP…
To em duvida em uma coisa, Coloco o codigo do servlet no processRequest,no doGet ou no doPost?(por enquanto nenhum funcionou hehe)

meus arquivos sao esses :

cabeçalho.jsp

<%--
    Document   : consulta
    Created on : 13/06/2011, 18:45:15
    Author     : Felipe
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>MF VIAGENS</title>
        <link rel="stylesheet" type="text/css" href="newcss.css" />
    </head>
    <body>
            <div id="topo">
                    <h1>MF VIAGENS LTDA.</h1>
            </div>
            <div id="menu">
                <b>Menu</b><br />
                <a href="index.jsp">Home</a><br/>
                <a href="ConsultaServlet">Consulta </a><br />
                <a href="venda.jsp">Venda </a><br />
            </div>
            <div id="conteudo">

rodape.jsp

</div>
    </body>
</html>

ConsultaServlet.java

            Connection con = ConnectionBean.getInstance().getConnection();
            List<Cidade> lista = new ArrayList<Cidade>();
            lista = ViagemDAO.procuraOrigem(con);
            request.setAttribute("listaCidades", lista);
            RequestDispatcher view = request.getRequestDispatcher("consulta.jsp");
            view.forward(request, response);

consulta.jsp

<jsp:include page="cabecalho.jsp"/>
<select name="cidade" id="cidade">
     <!-- Utilizando a tag core do JSTL -->
     <c:forEach var="cidade" items="${listaCidades}">
         <option value="${cidade.idcidade}">${cidade.nomecidade}</option>
     </c:forEach>
</select>

<jsp:include page="rodape.jsp"/>

seria assim?

Bom ficar 1hr em um erro idiota, pelo menos faz aprender euahueha

Tava sem a tagLib, adicionei no “cabecalho.jsp”, nao adiantou… apos 1 hora mudando nome de variaveis e tetando de alguma maneira descobrir o jeito de usar isso fui testar colocar o tagLib no consulta.jsp…
Funcionou tranquilamente heuaheuah

Pelo jeito jsp:include nao inclui a tagLib…

Consegui preencher o select com a lista!
muito obrigado a todos ae ^^