[Resolvido] É possivel receber instancia de um objeto em JSTL?

Olá gujada,

Essa é minha pergunta. Porque tentei e não me veio ideia de como poderia fazer isso. Por exemplo: 

Tenho um bean chamado Planta e ele tem um método que busca no banco uma planta por um id. Sei que não é possivel passar parâmetros nos métodos em JSTL, então fiz o seguinte:

<jsp:useBean id="planta" class="bean.Planta" /> //instancia classe Planta
<% planta.buscaPlanta( planta.getId() ); %> //Usei scriptless para chamar método com parametro. Retorna um objeto Planta.

Então já fiz diversas tentativas para capturar esse retorno da Planta para continuar a usar o JSTL. Algumas das tentativas abaixo:

//Tentativa 1:
<c:set var="planta" value="<% planta.buscaPlanta( planta.getId() ); %>" /> //Pêee... Erro.
//Tentativa 2:
<c:set target="${planta}" value="<%= planta.buscaPlanta( 2 )%>" /> //Pêee... Erro, pois precisa do atributo property.

Preciso capturar esta instancia pois quero continuar a usar o JSTL com ela: ${planta.nome}, ${planta.tipo}, etc…

Obs: O metodo buscaPlanta está funcionando, pois retorna o valor de memória do bean

Agradeço a atenção. :slight_smile:

Consegui de uma forma não tão agradável, mas acredito que exista uma meio mais simples q receba o objeto direto ao invés de ficar setando uma por uma como fiz. Segue o exemplo que fiz:

<% planta = planta.buscaPlanta( planta.getId() ); %> 
 <c:set target="${planta}" property="cod" value="<%=planta.getCod()%>" /> 
 <c:set target="${planta}" property="nome" value="<%=planta.getNome()%>" />
 <c:set target="${planta}" property="end" value="<%=planta.getEnd()%>" />
 <c:set target="${planta}" property="cidade" value="<%=planta.getCidade()%>" />
 <c:set target="${planta}" property="gatewayMatriz" value="<%=planta.getGatewayMatriz()%>" />
 <c:set target="${planta}" property="habilitada" value="<%=planta.getHabilitada()%>" />

Como podem ver, usei bastante scriptless para setar as variáveis.
Se alguém conhecer uma outra forma de fazer isso… Deixo aberto o Tópico.

Opa! vc quer só listar esse bean? então envia a resposta do seu método via

request.setAttribute("variavel",bean);

depois pega ele como vc esta fazendo

Não queria fazer como fiz. Estou usando muito scriptless e não é bom. Deverá haver outro meio.

Outro desafio que tive:
Se o método retornar um Array de objetos (Planta), por exemplo, já não consigo capturar esse array para utilizar na JSTL :frowning:

Sim, tem e é como escrevi pra vc, passa o Array no teu servlet para a página assim request.setAttribute(“variavel”,array);

depois faz um for com JSTL na página e pronto nada de script.

Exemplo na página:


<c:forEach var="variavel que vai listar" items="${array_plantas}">
   
  ${variavel que vai listar.nome_planta}

 </c:forEach>
 

Valeu Guinter! Funcionou!!

Abração!

e tu pode também criar uma função EL para buscar o seu objeto.

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html