Eu preciso esconder um elemento se certos valores estiverem presentes no JSP
Os valores são armazenados em uma lista, então tentei:
<c:if test="${ mylist.contains( myValue ) }">style='display:none;'</c:if>
Mas não funciona.
Como posso avaliar se uma lista contém um valor em JSTL, a lista e os valores são strings.
Respostas:
Infelizmente, acho que o JSTL não oferece suporte a nada além de uma iteração por meio de todos os elementos para descobrir isso. No passado, usei o método forEach na biblioteca de tags principais:
Após a execução, $ {contains} será igual a "true" se myList contiver myValue.
fonte
não há nenhum recurso embutido para verificar isso - o que você faria é escrever sua própria função tld, que pega uma lista e um item, e chama o método contains () da lista. por exemplo
Em seguida, crie uma classe chamada Yourclass e adicione um método estático chamado contains com a assinatura acima. Tenho certeza de que a implementação desse método é bastante autoexplicativa:
Depois, você pode usá-lo em seu jsp:
A tag pode ser usada em qualquer JSP no site.
editar: mais informações sobre o arquivo tld - mais informações aqui
fonte
Collection
vez deList
no taglib - funciona da mesma forma, mas suporta mais tipos de coleção comoSet
sOutra maneira de fazer isso é usar um
Map (HashMap)
com pares de chave e valor que representam seu objeto.Em JSTL
Isso deve retornar verdadeiro se o par existir no mapa
fonte
test="${isPresentByValue[myValue]}"
,.Você precisa usar a função
fn:contains()
oufn:containsIgnoreCase()
....
ou
Nota: Isso funcionará como
mylist.toString().contains("apple")
e se não for o que você está procurando, use uma outra abordagem.fonte
mylist.toString().contains("apple")
absolutamente diferente do que você esperava inicialmente.O que segue é mais uma solução alternativa do que uma resposta à sua pergunta, mas pode ser o que você está procurando. Se você pudesse colocar seus valores em um mapa em vez de uma lista, isso resolveria seu problema. Basta mapear seus valores para um valor não nulo e fazer isso
<c:if test="${mymap.myValue ne null}">style='display:none;'</c:if>
ou você pode até mesmo mapearstyle='display:none;
e simplesmente gerar${mymap.myValue}
fonte
OU
fonte
Se você estiver usando EL 3.0+ , a melhor abordagem neste caso é como esta outra resposta explicada em outro tópico:
fonte
Se estiver usando Spring Framework, você pode usar Spring TagLib e SpEL:
fonte
Eu achei essa solução incrível.
A saída para o código acima é
Minha lista é [um, dois, três]
Minha lista contém dois
Minha lista contém,
Eu espero que isso ajude alguém.
fonte
Este trabalho é bom para mim.
fonte