JSTL if tag para strings iguais

90

Eu tenho uma variável de um objeto na minha página JSP:

<%= ansokanInfo.getPSystem() %>

O valor da variável é o NAT que está correto e desejo aplicar certos elementos da página a este valor. Como faço para usar uma tag para conhecer o caso? Eu tentei algo como

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

Mas o acima não exibe nada. Como devo fazer isso? Ou posso usar scriptlets, ou seja,

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

Obrigado por qualquer resposta ou comentário.

Niklas R.
fonte
1
Você pode elaborar getPSystem()e ansokanInfo? você os define na solicitação ou acessa-os por meio import?
Santhosh
1
O IIRC I estava configurando-os na solicitação e a solução (solução alternativa) era atualizar o websphere conforme informado pelo BalusC e, em seguida, uma versão mais recente pode invocar métodos de bean por tags. Eu estava usando o websphere padrão na questão e alguma versão antes que jsp e jstl pudessem executar métodos. Encontre minha outra pergunta onde BalusC nos diz que eu estava usando uma versão do websphere que precisava de uma versão mais recente para poder invocar os métodos.
Niklas R.
1
Agora você atualizou seu servidor de aplicativos para o era 8? e essa solução falha?
Santhosh
@SanKrish Eu não uso JSP agora. Espero que funcione para você e que tenha sido atualizado para as versões mais recentes do servidor de aplicativos.
Niklas R.

Respostas:

145

Experimentar:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP / Servlet 2.4 (acho que é o número da versão) não suporta chamadas de método em EL e suporta apenas propriedades. Os contêineres de servlet mais recentes oferecem suporte a chamadas de método (ou seja, Tomcat 7).

Adam Gent
fonte
1
Eu atualizei minha resposta com base na resposta de Jorn. Ponta do chapéu para ele.
Adam Gent,
3
Desisti do JSP (X). Eu uso Mustache ( github.com/samskivert/jmustache ) ou minha própria linguagem de modelos JATL ( code.google.com/p/jatl ).
Adam Gent de
1
Como você faria várias strings? Deve haver uma maneira melhor do que<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon
36
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Phani
fonte
16

Acho que as outras respostas perdem um detalhe importante sobre o nome da propriedade a ser usado na expressão EL. As regras para conversão de nomes de métodos em nomes de propriedades são especificadas em 'Introspector.decpitalize`, que faz parte do padrão do Java bean:

Normalmente, isso significa converter o primeiro caractere de maiúscula para minúscula, mas no caso especial (incomum), quando há mais de um caractere e o primeiro e o segundo caracteres são maiúsculos, deixamos como está.

Assim, "FooBah" torna-se "fooBah" e "X" torna-se "x", mas "URL" permanece como "URL".

Portanto, no seu caso, o código JSTL deve ser semelhante ao seguinte, observe o 'P' maiúsculo:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Jörn Horstmann
fonte
2
Getters e setters com uma convenção de nomenclatura são praticamente a definição de um bean java. Acho que precisamos de mais algumas informações sobre onde a variável é passada para o jsp. Para estar disponível para EL, ele deve estar em algum escopo, por exemplo, como um pedido ou atributo pageContext. Uma variável local criada por um bloco de script não estaria disponível para EL.
Jörn Horstmann
5

Você pode usar scriptlets, no entanto, esse não é o caminho a seguir. Atualmente, os scriplets embutidos ou o código JAVA em seus arquivos JSP são considerados um mau hábito.

Você deve ler um pouco mais sobre JSTL. Se o objeto ansokanInfo estiver em seu escopo de solicitação ou sessão, imprimir o objeto (método toString ()) como este: $ {ansokanInfo} pode fornecer algumas informações básicas. $ {ansokanInfo.pSystem} deve chamar o método getter do objeto. Se tudo isso funcionar, você pode usar este:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
JohanB
fonte