JSTL c: установить условие - PullRequest
       2

JSTL c: установить условие

9 голосов
/ 16 сентября 2011

Нужна ваша помощь в выяснении этой вещи.
Сценарий: На моем JSP я пытаюсь распечатать

<b>Season 1: ${season}</b>

<b>Season 2: ${season}</b>

это печатается отлично с первого раза (оба сезона печатаются как "зима" изначально). Теперь я хотел добавить условие if для изменения значения сезона, например:

<c:if test="${temperature eq 'HOT' || 'VERYHOT'}">
       <c:set var="season" value="summer is here" />
 </c:if>

При выполнении условия if сезон 1 меняется на «лето уже здесь», но сезон 2 остается прежним. Почему так и остается? Сезон 1 является частью page1.jsp, а сезон 2 является частью page2.jsp и они включены в parentPage.jsp

1 Ответ

14 голосов
/ 16 сентября 2011

Две проблемы:

Во-первых, ваше сравнение недопустимо.2-е условие всегда true.Исправьте это соответствующим образом:

<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">

Во-вторых, вы сохраняете переменную в области страниц по умолчанию, которая не распределяется между включенными страницами JSP.Вместо этого сохраните его в области запроса.

<c:set var="season" value="summer is here" scope="request" />

Обновление : как следует из комментариев, эти JSP не участвуют в одном запросе.Затем вы должны захватить область действия сеанса (и учтите, что таким образом переменная отображается во всех запросах во всех окнах / вкладках браузера! Это само по себе нежелательно).Вы должны только убедиться, что вы указываете область в каждые <c:set var="season">.

<c:set var="season" value="some value" scope="session" />

Выражение EL ${season} будет выполнять поиск первого ненулевого атрибута соответственно в области страницы, запроса, сеанса и приложения.Так что если вы делаете <c:set> без явной области видимости, то она будет сохранена в области видимости страницы и получена на той же самой странице как таковая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...