[Resolvido]é possivel passar tags de java para jsp :?:

6 respostas
afffernando

Boa tarde,
a minha duvida é a seguinte, eu precisava passar alguns codigos (em html) para minha pagina jsp, porem da forma que eu estou fazendo atualmente ( bean:write ) para recuperar as informações, ele reconhece somente como string, segue um exemplo do que eu gostaria que acontecesse.

**** no java eu tenho algo como
String tag = "<tr> <td> Testes </td> <td> Res1 </td> </tr>...";

**** no jsp eu gostaria que ficasse assim
<table>
  <thead>
    <th> Cabeçalho </th>
    ...
  </thead>
  <tbody>
    ****aqui entraria a variavel tag
  </tbody>
</table>

eu estou usando Struts (não sei se faz diferença), e já tentei fazer isso com o logic:iterate, porem não esta funcionando quando passo dados muito grandes, ele acaba se perdendo e em determinado momento para de reconhecer os registros. Então queria ver se eu passando a linha já formada ( com o logic:iterate eu passo coluna por coluna e linha por linha), com todas as tags, se ele iria deixar de se perder.

grato

6 Respostas

B

Não sei muito bem o que você gostaria de fazer.
Acredito que este tipo de abordagem não seja muito recomendável.

Eu costumo utilizar JSTL em minhas aplicações, ai ficaria mais ou menos desta maneira:

<table>
	<tr>
		<td> <b> Codigo tarefa</b> </td>
		<td> <b> Título</b> </td>
		<td> <b> Descrição</b> </td>
		<td> <b> Data Máxima</b> </td>
	</tr>
	<c:forEach items="${lista}" var="l">
		<tr>
			<td>${l.codigo } </td>
			<td>${l.titulo } </td>
			<td>${l.descricao } </td>
			<td><fmt:formatDate value="${l.dataFinal.time }" pattern="dd/MM/yyyy"/>${l.dataFinal.time } </td>
			<td><a href="AlterarTarefa?codigo=${tarefa.id}">Alterar Tarefa</a> </td>
		</tr>
	</c:forEach>
</table>

Para passar esta variável que você deseja pelo struts, na classe que irá redericionar para o JSP, crie a variável e o método get, que o struts automaticamente passa a variável, e você acessará no JSP, através de JSTL.

ex:

(na classe java)

private String html;

//cria o método get da variável html

e na página jsp

você acessa a variável da seguinte maneira ${html}
Se você deixar isto na mágina ele irá escrever o conteúdo da variável, por conter código html, acredito que ele gerará a tabela. Porém nunca fiz nada parecido e não testei aqui.

afffernando:
Boa tarde,
a minha duvida é a seguinte, eu precisava passar alguns codigos (em html) para minha pagina jsp, porem da forma que eu estou fazendo atualmente ( bean:write ) para recuperar as informações, ele reconhece somente como string, segue um exemplo do que eu gostaria que acontecesse.

**** no java eu tenho algo como
String tag = "<tr> <td> Testes </td> <td> Res1 </td> </tr>...";

**** no jsp eu gostaria que ficasse assim
<table>
  <thead>
    <th> Cabeçalho </th>
    ...
  </thead>
  <tbody>
    ****aqui entraria a variavel tag
  </tbody>
</table>

eu estou usando Struts (não sei se faz diferença), e já tentei fazer isso com o logic:iterate, porem não esta funcionando quando passo dados muito grandes, ele acaba se perdendo e em determinado momento para de reconhecer os registros. Então queria ver se eu passando a linha já formada ( com o logic:iterate eu passo coluna por coluna e linha por linha), com todas as tags, se ele iria deixar de se perder.

grato

afffernando

bffermino obrigado pela ajuda, bom o que eu estou fazendo é montar uma tabela em tela com N linhas, os valores eu recupero de um arquivo e minha base de dados.
o modo que eu estou fazendo no momento, resolve em parte meu problema, ele exibe o que eu quero, mas se perde e dá erro quando são muitas linhas a adicionar.
então o que eu quero é aranjar um meio de deixar a informação menos pesada (por isso pensei em já entregar a linha inteira)

hoje eu faço assim

*** no java
...
for (i=0; i<tamanho, i++){
...
listaItens[i][0] = codigo;
listaItens[i][1] = nome;
listaItens[i][2] = endereco;
}
ResultTable htTabela = (ResultTable) pageContext.getAttribute("resultTable", pageContext.REQUEST_SCOPE);
htTabela.setTable(listaItens);


*** no jsp
<logic:iterate name="resultTable" property="table" id="linha" indexId="indexDaLinha" >
  <tr>
  <logic:iterate  id="coluna" name="linha" indexId="indexDaColuna" >
      <td><center><bean:write name="coluna" property="label"/></center></td>
  </logic:iterate>
  <tr>
</logic:iterate>

e quanto ao JSTL, eu não conheço, ele não consta no projeto, e acredito que meu chefe nao vai querer mais uma biblioteca para um caso especifico, mas mesmo assim se você tiver alguma apostila que explique o que ele é eu agradeceria (sempre é bom aprender novos metodos de se fazer as mesmas coisas)

B

Olá,

Não entendi muito bem o que você quis dizer com isso:

Referente ao JSTL, na apostila da Caelum do curso Fj-21, você encontra um material http://www.caelum.com.br/download/caelum-java-web-fj21.pdf

Sobre as bibliotecas, eu sei que no Tomcat, essas bibliotecas já estão nele, portanto não seria necessário adicionar ao seu projeto. Mesmo que queira adicionar no projeto (como eu sempre faço), são bem pequenas, não costumam pesar, e são as bibliotecas da própria SUN.

afffernando:
bffermino obrigado pela ajuda, bom o que eu estou fazendo é montar uma tabela em tela com N linhas, os valores eu recupero de um arquivo e minha base de dados.
o modo que eu estou fazendo no momento, resolve em parte meu problema, ele exibe o que eu quero, mas se perde e dá erro quando são muitas linhas a adicionar.
então o que eu quero é aranjar um meio de deixar a informação menos pesada (por isso pensei em já entregar a linha inteira)

hoje eu faço assim

*** no java
...
for (i=0; i<tamanho, i++){
...
listaItens[i][0] = codigo;
listaItens[i][1] = nome;
listaItens[i][2] = endereco;
}
ResultTable htTabela = (ResultTable) pageContext.getAttribute("resultTable", pageContext.REQUEST_SCOPE);
htTabela.setTable(listaItens);


*** no jsp
<logic:iterate name="resultTable" property="table" id="linha" indexId="indexDaLinha" >
  <tr>
  <logic:iterate  id="coluna" name="linha" indexId="indexDaColuna" >
      <td><center><bean:write name="coluna" property="label"/></center></td>
  </logic:iterate>
  <tr>
</logic:iterate>

e quanto ao JSTL, eu não conheço, ele não consta no projeto, e acredito que meu chefe nao vai querer mais uma biblioteca para um caso especifico, mas mesmo assim se você tiver alguma apostila que explique o que ele é eu agradeceria (sempre é bom aprender novos metodos de se fazer as mesmas coisas)

C

cara, não sei se entendi bem, mas se for o que estou pensando de uma lida sobre displaytag.

voce vai ter um bean com um atributo para armazenar cada coluna da sua base de dados, ou arquivo de carga,
depois voce cria um array desse desse bean e popula na sua session.

+/- assim:

executa o select.
listaRetornadaResultSet = new ArrayList();

		do {

		    Bean bean = new Bean( );
		    bean.setNome( ... );
		    bean.setId( ... );
                    bean.setEndereco( ... );
		    listaRetornadaResultSet .add( bean);

		}while( rs.next() );

no seu jsp voce vai recuperar esse array:

<display:table name="sessionScope.listaRetornadaResultSet" pagesize="20" id="element" class="disp_table" >
								
	<display:column property="id" titleKey="comum.id" />
	<display:column property="nome" titleKey="comum.nome" />
	<display:column property="endereco" titleKey="comum.endereco" />
	<display:setProperty name="sort.behavior" value="list" />
	<display:setProperty name="paging.banner.include_first_last" value="true" />
</display:table>

o display tag vai ler cada posicao do seu array, pegar o objeto, e imprimir a propriedade desejada.

espero ter ajudado...

qualquer duvida posta ae.

abraços!

afffernando

bffermino:
Olá,

Não entendi muito bem o que você quis dizer com isso:

Ola bffermino, o que eu queria dizer com esse pedaço é que o meu codigo (o usando logic:iterate) resolve meu problema até certo ponto (numero pequeno de linhas que ele irá inserir) mas quando eu aumento o numero de linhas (acima de 60) ele começa a se perder, como se a sessão estivesse encerrada, dai ele da erro pois não localiza mais a variavel.

Então eu pensei, que passando a instrução já em html (com as tags necessarias, e sem que o servidor precisasse processar varios logic:iterate) poderia funcionar.

Ola chinelolaranja uma duvida, este metodo ( o display tag) reduz o processamento em relação ao logic:iterate ? pois como eu entendo pouco sobre esses assuntos eu não tenho essa noção.

obrigado a ambos pela ajuda, mas continuo em busca de uma solução…

afffernando

Consegui solucionar meu problema, se mais alguem algum dia precisar, a solução é muito idiota… :?

o que acontecia era que o bean:write faz um tratamento na variavel para que esta não contenha nenhum caractere não permitido no html, dai que vem o ponto crucial.
na hora que você vai colocar para que ele escreva o conteudo da variavel vocÊ tem que colocar para ele não filtrar, ou seja, aproveitando o codigo da primeira postagem, ficaria assim. (alteração em negrito)

**** no java eu tenho algo como  
 String tag = "<tr> <td> Testes </td> <td> Res1 </td> </tr>...";
this.getRequest().setAttribute("html",tag);
   
 **** no jsp eu gostaria que ficasse assim  
 <table>  
  <thead>  
    <th> Cabeçalho </th>  
    ...  
   </thead>  
   <tbody>  
     
       <bean:write name="html" filter="false"/>   **************alteração nessa linha acresentado o filter = false

   </tbody>  
 </table>
Criado 11 de fevereiro de 2011
Ultima resposta 14 de fev. de 2011
Respostas 6
Participantes 3