Питання JSTL, якщо тег для рівних рядків


У мене є змінна з об'єкта на моїй сторінці JSP:

<%= ansokanInfo.getPSystem() %>

Значення змінної - це правильний NAT, і я хочу застосувати певні елементи сторінки для цього значення. Як я можу використовувати тег, щоб знати справу? Я спробував щось подібне

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

Але вищесказане нічого не відображається. Як мені це зробити? Або я можу якось скористатися сценаріями, тобто

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

Дякую за будь-яку відповідь або коментар.


72
2018-04-17 11:02


походження


Можете, будь ласка, роз'ясни getPSystem() і ansokanInfo ? Ви встановлюєте їх у запиті або отримуєте доступ до них через import ? - San Krish
IIRC Я встановлював їх у запиті, і рішенням (рішенням) було оновлення веб-сторінки, як розповів BalusC, а потім нова версія може викликати теги bean. Я використовував стандартну веб-сферу в питанні та деякій версії, перш ніж jsp і jstl могли запускати методи. Будь ласка, знайди моє інше питання де BalusC повідомляє нам, що я використовував версію websphere, для якої потрібні новіші версії, щоб мати змогу викликати ці методи. - Niklas Rosencrantz
Так що тепер ви оновили свій сервер додатків до 8 років? і це рішення не вдається? - San Krish
@SanKrish Я не використовую JSP зараз. Я сподіваюсь, що він працює для вас і що він був оновлений для нових версій сервера додатків. - Niklas Rosencrantz


Відповіді:


Спробуйте:

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

JSP / Servet 2.4 (я думаю, це номер версії) не підтримує виклики методу в EL і підтримує лише властивості. Останні контейнери сервлета підтримують виклики методу (тобто Tomcat 7).


121
2018-04-17 11:11



Я оновив мою відповідь на основі відповіді Джорна. Рада капелюха до нього. - Adam Gent
Я відмовився від JSP (X). Я або користуюся вусами (github.com/samskivert/jmustache) або моя власна мова шаблону JATL (code.google.com/p/jatl) - Adam Gent
Як би ви робили кілька рядків? Там має бути кращий спосіб, ніж <c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}"> - Patience


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

31
2018-04-17 11:13





Я думаю, що інші відповіді пропускають одну важливу деталь стосовно назви властивості, що використовується в виразі EL. Правила для перетворення з імен методу на імена властивостей вказані в 'Introspector.decpitalize' який є частиною стандарту Java-компонента:

Це звичайно означає перетворення першого символу з верхнього регістру на нижній регістр, але в (незвичайний) особливий випадок, коли є більше одного символу, а перший та другий символи є верхніми, ми залишаємо його окремо.

Таким чином, "FooBah" стає "fooBah", а "X" стає "x", але "URL" залишається "URL".

Отже, у вашому випадку код JSTL повинен виглядати наступним чином: примітка "P":

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

16
2018-04-17 11:25



Геттери та сетери з конвенцією іменування в значній мірі є визначенням Java-компонента. Я думаю, нам потрібна додаткова інформація про те, де передається змінна до jsp. Для того, щоб бути доступним для EL, він має бути в певній області, наприклад, як запит або атрибут pageContext. Локальна змінна, створена блоком скриптів, не буде доступна для EL. - Jörn Horstmann


Ви можете використовувати сценарії, однак це не спосіб піти. На сьогоднішній день вбудовані скрипти або код JAVA у файлах JSP вважається поганою звичкою.

Ви повинні прочитати ще на JSTL. Якщо об'єкт ansokanInfo знаходиться у вашому запиті чи сюжеті, надрукуйте об'єкт (метод toString () таким чином: $ {ansokanInfo} може дати вам деяку базову інформацію. $ {ansokanInfo.pSystem} слід викликати метод getter-об'єкта. Якщо це все працює, ви можете використовувати це:

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

5
2018-04-17 11:14