JSTL como saber se um objeto pertence a uma lista

5 respostas
M

OLá, galera!
Tenho o seguinte problema: Tenho um objeto bar e que saber se o mesmo se encontra na lista foo. Eu sei que eu poderia fazer algo como “foo.contains(bar)”, mas estou num JSP e não gostaria de utilziar um scriplet para isso.
Então vai a pergunta: Como saber se um objeto pertence a uma lista utilizando JSTL?
Ou, ainda, como executar um método num objeto por JSTL (isso resolveria o problema de forma mais genérica)?
Eu recebi algumas dicas dos colegas de trabalho, mas achei as técnicas espartanas demais. A saber:
-Fazer um foreach comparando cada item de foo com bar.
-Criar um TagSupport par isto.
Se alguém souber responder eu agradeço!!!
Se não souber eu agraço do mesmo jeito!!! :stuck_out_tongue:
E me perdoem se a pergunta é estúpida demais!
Shalom!!!

5 Respostas

Fernando_Generoso_da

Não tem como via JSTL padrão. Teria ou que fazer como seu amigo falou, com forEach ou criar uma Custom Tag que faria isso para você.

M
Ok, vocês Venceram! E, para provar meu agradecimento, aí vai o source da brincadeira como contribuição:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.gov.sus.projetosus.tagsupport;

import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 *
 * @author mluciano
 */
public class ContainsTagSupport extends TagSupport{
    private Object anObject;
    private List aList;
    private String textIfContains;

    @Override
    public int doStartTag() throws JspException{
        if(this.getaList() != null && this.getaList().contains(getAnObject())){
            try {
                pageContext.getOut().write(this.getTextIfContains());
            } catch (IOException ex) {
                Logger.getLogger(ContainsTagSupport.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return EVAL_BODY_INCLUDE;
    }

    /**
     * @return the anObject
     */
    public Object getAnObject() {
        return anObject;
    }

    /**
     * @param anObject the anObject to set
     */
    public void setAnObject(Object anObject) {
        this.anObject = anObject;
    }

    /**
     * @return the aList
     */
    public List getaList() {
        return aList;
    }

    /**
     * @param aList the aList to set
     */
    public void setaList(List aList) {
        this.aList = aList;
    }

    /**
     * @return the textIfContains
     */
    public String getTextIfContains() {
        return textIfContains;
    }

    /**
     * @param textIfContains the textIfContains to set
     */
    public void setTextIfContains(String textIfContains) {
        this.textIfContains = textIfContains;
    }
}
E a definição no tld, para facilitar a vida da galera:
<tag>
      <description>Imprime um texto se um Objeto é constante de uma Lista</description>
      <name>contains</name>
      <tag-class>br.gov.sus.projetosus.tagsupport.ContainsTagSupport</tag-class>
      <body-content>JSP</body-content>
      <attribute>
          <name>aList</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          <type>java.util.List</type>
      </attribute>
            <attribute>
          <name>anObject</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          <type>java.lang.Object</type>
      </attribute>
      <attribute>
          <name>textIfContains</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
          <type>java.lang.String</type>
      </attribute>
  </tag>
Valeu!!!! Obrigado pela rápida resposta!!!! Shalom!!!!
M

Mas que isto é espartano é! :stuck_out_tongue:

Fernando_Generoso_da

Dá uma olhada em SimpleTag…
como o nome diz…é mais simples que o Classic Tag, que vc utilizou.

M

Obrigado pela orientação!
Vou dar uma olhada e qualquer coisa eu posto pelaí de novo!!!
Shalom!

Criado 4 de fevereiro de 2010
Ultima resposta 5 de fev. de 2010
Respostas 5
Participantes 2