JSTL if tag dla równych ciągów

91

Mam zmienną z obiektu na mojej stronie JSP:

<%= ansokanInfo.getPSystem() %>

Wartością zmiennej jest NAT, która jest poprawna i chcę zastosować określone elementy strony dla tej wartości. Jak używać tagu, aby poznać sprawę? Spróbowałem czegoś takiego

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

Ale powyższe nic nie wyświetla. Jak mam to zrobić? Czy mogę równie dobrze użyć skryptletów, tj

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

Dzięki za każdą odpowiedź lub komentarz.

Niklas R.
źródło
1
Czy możesz rozwinąć getPSystem()i ansokanInfo? czy ustawiasz je w żądaniu czy uzyskujesz do nich dostęp import?
Santhosh
1
IIRC Ustawiałem je w żądaniu, a rozwiązaniem (obejściem) było uaktualnienie websphere zgodnie z instrukcjami BalusC, a następnie nowsza wersja może wywoływać metody bean za pomocą tagów. W pytaniu użyłem standardowej websphere i pewnej wersji, zanim jsp i jstl mogły uruchamiać metody. Proszę znaleźć moje inne pytanie, w którym BalusC mówi nam, że korzystałem z wersji websphere, która wymagała nowszej wersji, aby móc wywołać metody.
Niklas R.,
1
Czy teraz zaktualizowałeś serwer aplikacji do wersji 8? i czy to rozwiązanie zawodzi?
Santhosh
@SanKrish Nie używam teraz JSP. Mam nadzieję, że to działa dla Ciebie i że zostało zaktualizowane dla nowszych wersji serwera aplikacji.
Niklas R.

Odpowiedzi:

147

Próbować:

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

JSP / Servlet 2.4 (myślę, że to numer wersji) nie obsługuje wywołań metod w EL i obsługuje tylko właściwości. Najnowsze kontenery serwletów obsługują wywołania metod (np. Tomcat 7).

Adam Gent
źródło
1
Zaktualizowałem swoją odpowiedź na podstawie odpowiedzi Jorna. Cynk kapelusza do niego.
Adam Gent,
3
Zrezygnowałem z JSP (X). Używam Mustache ( github.com/samskivert/jmustache ) lub własnego języka szablonów JATL ( code.google.com/p/jatl ).
Adam Gent
1
Jak zrobiłbyś wiele ciągów? Musi być lepszy sposób niż<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon
37
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Phani
źródło
16

Myślę, że inne odpowiedzi pomijają jeden ważny szczegół dotyczący nazwy właściwości, która ma być używana w wyrażeniu EL. Zasady konwersji z nazw metod na nazwy właściwości są określone w pliku „Introspector.decpitalize”, który jest częścią standardu java bean:

Zwykle oznacza to zamianę pierwszego znaku z dużej na małą, ale w (nietypowym) przypadku specjalnym, gdy jest więcej niż jeden znak, a zarówno pierwszy, jak i drugi znak są duże, zostawiamy to w spokoju.

W ten sposób „FooBah” staje się „fooBah”, a „X” staje się „x”, ale „URL” pozostaje „URL”.

Więc w twoim przypadku kod JSTL powinien wyglądać następująco, zwróć uwagę na duże „P”:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Jörn Horstmann
źródło
2
Metody pobierające i ustawiające z konwencją nazewnictwa są w zasadzie definicją fasoli Java. Chyba potrzebujemy więcej informacji dotyczących tego, gdzie zmienna jest przekazywana do pliku jsp. Aby był dostępny dla EL, musi być w jakimś zakresie, na przykład jako atrybut request lub pageContext. Zmienna lokalna utworzona przez blok skryptu nie byłaby dostępna dla EL.
Jörn Horstmann
5

Możesz używać skryptletów, jednak nie jest to właściwe. W dzisiejszych czasach wbudowane wykresy lub kod JAVA w plikach JSP są uważane za zły nawyk.

Przeczytaj więcej o JSTL. Jeśli obiekt ansokanInfo znajduje się w zasięgu żądania lub sesji, wydrukowanie obiektu (metoda toString ()) w następujący sposób: $ {ansokanInfo} może dostarczyć podstawowych informacji. $ {ansokanInfo.pSystem} powinno wywołać metodę pobierającą obiekt. Jeśli to wszystko działa, możesz użyć tego:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
JohanB
źródło