Оценить пустые или нулевые теги JSTL c


389

Как я могу проверить, является ли значение Stringnull или пустым, используя cтеги JSTL?

У меня есть переменная имени, var1и я могу отобразить ее, но я хочу добавить компаратор для проверки.

<c:out value="${var1}" />

Я хочу проверить, когда он нулевой или пустой (мои значения являются строками).

Ответы:


763

Как я могу проверить, является ли строка пустой или пустой, используя теги c JSTL?

Вы можете использовать emptyключевое слово в <c:if>для этого:

<c:if test="${empty var1}">
    var1 is empty or null.
</c:if>
<c:if test="${not empty var1}">
    var1 is NOT empty or null.
</c:if>

Или <c:choose>:

<c:choose>
    <c:when test="${empty var1}">
        var1 is empty or null.
    </c:when>
    <c:otherwise>
        var1 is NOT empty or null.
    </c:otherwise>
</c:choose>

Или, если вам не нужно условно визуализировать группу тегов и, таким образом, вы можете проверить это только внутри атрибута тега, тогда вы можете использовать условный оператор EL ${condition? valueIfTrue : valueIfFalse}:

<c:out value="${empty var1 ? 'var1 is empty or null' : 'var1 is NOT empty or null'}" />

Чтобы узнать больше об этих ${}вещах (язык выражений , который является отдельной темой от JSTL ), проверьте здесь .

Смотрите также:


4
Для людей, у которых возникают странные проблемы с пустым чеком, вот странная история с возможной причиной: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
В итоге: emptyне работает Setпри использовании древнего JSTL 1.0. Вам нужно будет обновить до JSTL 1.1 (который уже с 2003 года).
BalusC

5
@BalusC - Проверяет ли EL ${not empty var1}одновременно и пустое, и нулевое? Я имею в виду тест оценивается истинно , если и только если var1это не нуль и var1 является не пустой. Нет необходимости проверять nullотдельно?
Лев

1
является emptyequvilant к пе ''
Shareef

2
@shareef: нет, это не так. В случае Stringзначений это эквивалентно var ne null and var ne ''. Далее он также поддерживает Object, массив Collectionи Map.
BalusC

25

чтобы также проверить пустую строку, я предлагаю следующее

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:if test="${empty fn:trim(var1)}">

</c:if>

Он также обрабатывает нули


7

если вы отметите только null или empty, тогда вы можете использовать опцию with default для этого: <c:out default="var1 is empty or null." value="${var1}"/>


6

Этот код верен, но если вы ввели много пробела ('') вместо пустой или пустой строки, верните false.

Чтобы исправить это, используйте регулярное выражение (этот код ниже проверяет, является ли переменная нулевой, пустой или пустой, как org.apache.commons.lang.StringUtils.isNotBlank):

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
        <c:if test="${not empty description}">
            <c:set var="description" value="${fn:replace(description, ' ', '')}" />
            <c:if test="${not empty description}">
                  The description is not blank.
            </c:if>
        </c:if>

6

Вот один лайнер.

Тернарный оператор внутри ЭЛ

${empty value?'value is empty or null':'value is NOT empty or null'}

3

Ты можешь использовать

    ${var == null}

в качестве альтернативы.


Нет, к сожалению, вы не можете. "" без каких-либо символов в нем является пустой строкой, но не является нулевым.
ГДРТ

1

Вот пример того, как проверить int и String, которые вы передаете из контроллера Java в файл JSP.

MainController.java:

@RequestMapping(value="/ImportJavaToJSP")
public ModelAndView getImportJavaToJSP() {
    ModelAndView model2= new ModelAndView("importJavaToJSPExamples");

    int someNumberValue=6;
    String someStringValue="abcdefg";
    //model2.addObject("someNumber", someNumberValue);
    model2.addObject("someString", someStringValue);

    return model2;
}

importJavaToJSPExamples.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<p>${someNumber}</p>
<c:if test="${not empty someNumber}">
    <p>someNumber is Not Empty</p>
</c:if>
<c:if test="${empty someNumber}">
    <p>someNumber is Empty</p>
</c:if>
<p>${someString}</p>
<c:if test="${not empty someString}">
    <p>someString is Not Empty</p>
</c:if>
<c:if test="${empty someString}">
    <p>someString is Empty</p>
</c:if>

В чем проблема с моим комментарием?
Джин

-1
In this step I have Set the variable first:

<c:set var="structureId" value="<%=article.getStructureId()%>" scope="request"></c:set>

In this step I have checked the variable empty or not:

 <c:if test="${not empty structureId }">
    <a href="javascript:void(0);">Change Design</a>
 </c:if>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.