Оцініть порожні або нульові теги JSTL c


389

Як я можу перевірити, якщо Stringнуль чи порожній за допомогою 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 - Чи ${not empty var1}перевіряє EL одночасно порожнє та нулеве значення ? Я маю на увазі тест оцінюється як істинний, якщо і тільки якщо 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

якщо ви встановите лише нуль або порожній, для цього ви можете скористатися параметром за замовчуванням: <c:out default="var1 is empty or null." value="${var1}"/>


6

Цей код правильний, але якщо ви ввели багато місця ('') замість null або порожнього рядка, повертайте 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

Ось один лайнер.

Термінальний оператор всередині EL

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

3

Можна використовувати

    ${var == null}

альтернативно.


Ні, на жаль, ви не можете. "" без будь-яких символів у ньому порожній рядок, але не є нульовим.
gdrt

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.