Тег JSTL if для рівних рядків


90

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

<%= ansokanInfo.getPSystem() %>

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

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

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

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

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


1
Ви можете, будь ласка, детальніше розказати getPSystem()і ansokanInfo? Ви встановлюєте їх у запиті чи отримуєте доступ до них через import?
Santhosh,

1
IIRC I встановлював їх у запиті, і рішенням (обхідним шляхом) було оновити websphere, як сказав BalusC, а потім нова версія може викликати методи bean за допомогою тегів. Я використовував стандартну websphere у питанні та деяку версію, перш ніж jsp та jstl могли запускати методи. Будь ласка, знайдіть моє інше запитання, де BalusC повідомляє нам, що я використовував версію websphere, яка потребувала новішої версії, щоб мати можливість викликати методи.
Ніклас Р.

1
Отже, чи оновили ви свій сервер додатків до 8? і чи не вдається це рішення?
Santhosh

@SanKrish Я зараз не використовую JSP. Сподіваюся, це працює для вас і що оновлено для нових версій сервера додатків.
Ніклас Р.

Відповіді:


145

Спробуйте:

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

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


1
Я оновив свою відповідь на основі відповіді Йорна. Кінчик капелюха йому.
Адам Гент,

3
Я відмовився від JSP (X). Я або використовую Mustache ( github.com/samskivert/jmustache ), або мою власну мову шаблонування JATL ( code.google.com/p/jatl ).
Адам Гент,

1
Як би ви зробили кілька рядків? Має бути кращий спосіб, ніж<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Діллон,


16

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

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

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

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

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

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

5

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

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

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.