2012-04-17 12 views
71

Mam zmienną z obiektu na mojej stronie JSP:JSTL jeśli tag równych ciągów

<%= ansokanInfo.getPSystem() %>

Wartość zmiennej jest NAT, który jest poprawny i chcę zastosować pewne elementy strony dla tej wartości. Jak używać tagu do rozpoznawania sprawy? Próbowałem coś takiego, jak

<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żywać skryptletów, np.

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

Dzięki za jakąkolwiek odpowiedź lub komentarz.

+1

Czy możesz opracowania 'getPSystem()' i 'ansokanInfo'? ustawić je w żądaniu lub uzyskując do nich dostęp poprzez 'import'? –

+1

IIRC Ustawiłem je w żądaniu, a rozwiązaniem (obejściem) było uaktualnienie strony internetowej zgodnie z instrukcjami BalusC, a następnie nowsza wersja może wywoływać metody bean za pomocą znaczników. Używałem standardowej strony internetowej w pytaniu i pewnej wersji, zanim jsp i jstl mogłyby uruchomić metody. Proszę znaleźć [moje inne pytanie] (http://stackoverflow.com/questions/10742174/el-equivalent-of-object-methodparameter-in-was-8), gdzie BalusC informuje nas, że korzystałem z wersji na serwerze internetowym, która wymagała nowsza wersja, aby móc wywoływać metody. –

+1

Czy zmodernizowałeś serwer aplikacji na 8? i czy to rozwiązanie zawodzi? –

Odpowiedz

119

Spróbuj:

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

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

+1

Zaktualizowałem swoją odpowiedź na podstawie odpowiedzi Jorn. Końcówka kapelusza do niego. –

+2

Porzuciłem na JSP (X). Używam Moustache (https://github.com/samskivert/jmustache) lub mojego własnego JATL do szablonów (http://code.google.com/p/jatl/). –

+0

Jak zrobiłbyś wiele ciągów? Musi istnieć lepszy sposób niż '' – Patience

31
<c:if test="${ansokanInfo.pSystem eq 'NAT'}"> 
5

Możesz używać skryptów, ale to nie jest droga. Współcześnie wbudowane scriplety lub kod JAVA w twoich plikach JSP jest uważany za zły nawyk.

Powinieneś przeczytać na JSTL nieco więcej. Jeśli obiekt ansokanInfo znajduje się w twoim żądaniu lub zasięgu sesji, drukuj metodę object (toString()) w następujący sposób: $ {ansokanInfo} może dostarczyć pewnych podstawowych informacji. $ {ansokanInfo.pSystem} powinien wywołać metodę getter obiektu. Jeśli to wszystko działa, możesz użyć:

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

Myślę, że w innych odpowiedziach brakuje jednego ważnego szczegółu dotyczącego nazwy nieruchomości do użycia w wyrażeniu EL. Zasady konwersji z nazwami metody do nazw właściwości podano w 'Introspector.decpitalize` która stanowi część standardu Java Bean

zwykle oznacza przekształcanie pierwszej postaci z górnego pojemnika na małe, ale w (nietypowe) specjalny przypadek, gdy występuje więcej niż jeden znak, a pierwszy i drugi znak są dużymi literami, zostawiamy je w spokoju.

W ten sposób "FooBah" zmienia się w "fooBah", a "X" na "x", ale "URL" pozostaje jako "URL".

Więc w twoim przypadku kod JSTL powinna wyglądać następująco, należy zwrócić uwagę na kapitał 'P'

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

Gettery i setery z konwencją nazewnictwa są ładne dużo definicji fasoli Java. Chyba potrzebujemy więcej informacji na temat tego, gdzie zmienna jest przekazywana do jsp. Aby być dostępnym dla EL, musi być w pewnym zakresie, na przykład jako żądanie lub atrybut pageContext. Zmienna lokalna utworzona przez blok skryptu nie byłaby dostępna dla EL. –