Fitrando com Display:Tag

4 respostas
cv1

Galera, tou com uma ziquinha aqui que provavelmente quem ja teve que mexer com Display:Tag e Struts (*inclua som de vomito aqui*) enfrentou.

Tenho uma lista de produtos dentro de um bean:

public class ItemInfo {
  private List<Product> products = new ArrayList<Product>();
  ...
  getters setters etc etc etc
  ...
}

Estou mostrando uma tabelinha bonita desses produtos usando display:tag:

<display:table name="itemInfo" property="products" ...>
  <display:column property="name"/>
  <display:column property="subtotal"/>
  ...
</display:table>

O problema eh que agora eu so quero mostrar alguns desses produtos nessa lista, e mostrar o resto deles em outra listinha logo abaixo (caso vcs estejam mesmo desesperados pra saber, eu quero separar a lista de produtos que foram trazidos de outro estoque versus os que estavam no estoque da loja).

Meu problema, entao, eh mostrar soh os itens que tem a propriedade tal na lista, mas isso aqui nao funciona:

<display:table name="itemInfo" property="products" uid="row">

  <logic:equal name="row" property="inStock" value="true">
    <display:column property="name"/>
    <display:column property="subtotal"/>
    ...
  </logic:equal>

</display:table>

Mexer no codigo do ItemInfo.getProducts() nao da certo, pq ali no meio dos display:column tem uma checkbox que depende da numeracao correta do row_rowNum pela display:tag, e se eu retornasse uma lista ja filtrada no getProducts(), eu ia ter problemas com os indices da lista depois do submit.

O logic:equal nao consegue pegar o atributo 'row' no pageContext, e eu tou meio sem ideias. O que eu poderia fazer aqui, lembrando que eu nao quero/posso mexer no getProducts()? Tem alguma coisa no display:tag que me deixe passar um filtro customizado pra cada tabelinha que ele gera?

4 Respostas

Ironlynx

Cv, vc resolveu esse seu problema?
Eu tô + ou - perdido com as displaytags… tô querendo paginar Ramos de Seguro exibindo 10 por página, mas eu não saquei como as displaytags “pesquisam” pelos dados.Penso em algo + ou - assim:

&lt;%@ taglib uri="http://displaytag.sf.net" prefix="display" %&gt; &lt;%@ page import="ageris.dao.MySQLRamoDeSeguroDAO"%&gt; &lt;h2&gt;Exibindo Ramos de Seguro:&lt;/h2&gt; &lt;display:table name="ramoseg" pagesize="10"&gt; &lt;display:column property="id_ramoseg" title="ID Ramoseg" /&gt; &lt;display:column property="id_tiposeg" title="ID Tiposeg" /&gt; &lt;display:column property="inicio" title="Data de Cadastro"/&gt; &lt;display:column property="impo_segurada" title="Valor Segurado"/&gt; &lt;display:column property="premio" title="Prêmio do Seguro"/&gt; &lt;display:column property="id_seguradora" title="Cód. da Seguradora"/&gt; &lt;display:column property="id_cobertura" title="Cód. da Cobertura"/&gt; &lt;display:column property="corretagem" title="Valor Corretagem"/&gt; &lt;display:column property="lmi" title="Limite de Indenização"/&gt; &lt;display:column property="patrimonio_liq" title="Patrimônio Líquido"/&gt; &lt;/display:table&gt;
Mas isso é correto?Tipow, em MySQLRamoDeSeguroDAO tem o método que faz o select que traz todo mundo do BD, mas eu não tenho que indicar nada(a chamada ao método) com o List?

H

Olá pessoal…

Eu peguei algumas tabelas e joguei o displaytag para fazer algumas paginações…

A medida que fui fazendo, me deparei com algumas dificuldades(inclusive ainda estou me deparando, rsrsrs)…
Mas do pouco que peguei já dá pra ter uma idéia do que seria bom pra o CV fazer em questão ao seu problema…
Só que vai exigir um trabalhinho…
Seria os Decorators - classes que estendem a “TableDecorator” do displaytag…
Para saber mais a respeito:

http://displaytag.homeip.net/displaytag-examples-1.1/example-decorator.jsp

Quanto a dúvida do Ironlynx:

Realmente é só isso mesmo que vc fez…
O displaytag irá fazer o resto através da API…
Veja:
http://displaytag.sourceforge.net/11/tut_basic.html

Ironlynx

Já deu uma olhada na data de quando ele postou?Agora que eu vi…rsrs

Eu jah tinha lido isso!Eu só achei estranho é que eu não vi nenhum código do tipo MeuDAO.getListaMeuDAO(); onde retornaria os dados selecionados do BD.Deve rolar uma introspecção ou algo do tipo…

Há, acho que eu saquei:

Mas isso implica em deixar os atributos públicos não?

keller

Se ainda estiver precisando…

Tenta assim:

<display:table name="itemInfo" property="products" uid="row">

  <c:if test="${row.inStock}"
    <display:column property="name"/>
    <display:column property="subtotal"/>
    ...
  </c:if>

</display:table>
Criado 16 de agosto de 2005
Ultima resposta 25 de jul. de 2006
Respostas 4
Participantes 4