Условная проверка JSTL

На моей текущей странице я использую 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>

Ответ 1

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

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

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

<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>

Ответ 2

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

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

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