Условная проверка 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 - Информационные системы: классическая трехуровневая архитектура.
Также выполняйте контроль/проверку на уровне клиента, прежде чем продолжать данные... но я думаю, что если это наследие, а веб-страницы - это единственное, что вы можете коснуться... это создает ощущение