Avaliar tags JSTL c vazias ou nulas


389

Como posso validar se a Stringé nulo ou vazio usando as ctags de JSTL?

Eu tenho uma variável de nome var1e posso exibi-la, mas quero adicionar um comparador para validá-la.

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

Quero validar quando é nulo ou vazio (meus valores são cadeias).

Respostas:


763

Como posso validar se uma String é nula ou vazia usando as tags c do JSTL?

Você pode usar a emptypalavra - chave em a <c:if>para isso:

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

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

Ou, se você não precisar renderizar um monte de tags condicionalmente e, portanto, você só poderá verificá-lo dentro de um atributo de tag, poderá usar o operador condicional EL ${condition? valueIfTrue : valueIfFalse}:

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

Para saber mais sobre essas ${}coisas (a Expression Language , que é um assunto separado do JSTL ), verifique aqui .

Veja também:


4
Para as pessoas que estão tendo problemas estranhos com o cheque vazio, aqui está uma história duvidoso com uma possível causa: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
Resumido: emptynão funciona Setao usar o antigo JSTL 1.0. Você precisaria atualizar para o JSTL 1.1 (que já é de 2003).
BalusC

5
@BalusC - O EL ${not empty var1}verifica se há vazio e nulo simultaneamente? Quero dizer que o teste é avaliado como verdadeiro se e somente se nãovar1 for nulo e nãovar1 estiver vazio. Não há necessidade de verificar separadamente? null
Lion

11
é emptyequivalente a ne ''
shareef 17/01

2
@ Shareef: não, não é. Em caso de Stringvalores, é equivalente a var ne null and var ne ''. Além disso, ele também suporta Object, array CollectioneMap .
precisa saber é o seguinte

25

para verificar também a string em branco, sugiro seguir

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

Ele também lida com nulos


7

se você marcar apenas nulo ou vazio, poderá usar a opção with default para isso: <c:out default="var1 is empty or null." value="${var1}"/>


6

Este código está correto, mas se você inseriu muito espaço ('') em vez de uma cadeia nula ou vazia, retorne false.

Para corrigir isso, use a expressão regular (este código abaixo, verifique se a variável é nula ou vazia ou em branco, igual a 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

Aqui está o forro.

Operador ternário dentro do EL

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

3

Você pode usar

    ${var == null}

alternativamente.


Não, infelizmente, você não pode. "" sem nenhum símbolo, é uma string vazia, mas não é nula.
GDRT

1

Aqui está um exemplo de como validar um int e uma String que você passa do Java Controller para o arquivo 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>

Qual é o problema do meu comentário?
Gene

-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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.