JSTL условная проверка - PullRequest
16 голосов
/ 03 июня 2011

На моей текущей странице я использую JSTL, чтобы проверить, доступны ли данные для моей формы.Проблема, с которой я сталкиваюсь: «если нет данных, я не вижу текстовые поля».Я могу решить эту проблему с помощью тегов и тегов, но это повлечет за собой много кода, если и еще, если еще какой-то код по всей странице.Кто-нибудь может предложить мне более чистое решение этой проблемы?

<c:if test="${salesData!=null}">
  <c:if test="${fn:length(salesBundle.salesArea) > 0}">
  <input type="text" id="sales_area" class="salesManagerStyle">
  </c:if>
</c:if>

Ответы [ 2 ]

17 голосов
/ 03 июня 2011

Вы можете иметь несколько условий в test.

<c:if test="${salesData != null && fn:length(salesBundle.salesArea) > 0}">
    <input type="text" id="sales_area" class="salesManagerStyle">
</c:if>

Но вы также можете использовать ключевое слово empty для выполнения и проверки нуля и длины.

<c:if test="${not empty salesData.salesArea}">
    <input type="text" id="sales_area" class="salesManagerStyle">
</c:if>

Это лучшее, что вы можете получить сейчас. Если вам нужно повторно использовать то же условие в другом месте страницы, то вы также можете сохранить его с помощью <c:set>.

<c:set var="hasSalesData" value="${not empty salesData.salesArea}" />
...
<c:if test="${hasSalesData}">
    <input type="text" id="sales_area" class="salesManagerStyle">
</c:if>
...
<c:if test="${hasSalesData}">
    Foo
</c:if>
0 голосов
/ 24 апреля 2014

Я стараюсь использовать как можно меньше логики на своих веб-страницах,

"Уровень интерфейса относительно свободен от обработки приложения; окна или веб-страницы пересылают запрос задачи на средний уровень" Грейг Ларман, Применение UML и шаблонов, третье издание, стр. 575 - Информационные системы: классическая трехуровневая архитектура.

Также выполните контроль / проверку на уровне клиента перед сохранением данных ... но я думаю, что еслиэто наследие, и веб-страницы - это единственное, к чему можно прикоснуться ... это имеет смысл

...