How can I validate if a String
is null or empty using the c
tags of JSTL
?
I have a variable of name var1
and I can display it, but I want to add a comparator to validate it.
<c:out value=\"${var1}\" />
I want to validate when it is null or empty (my values are strings).
How can I validate if a String is null or empty using the c tags of JSTL?
You can use the empty
keyword in a <c:if>
for this:
<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>
Or the <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>
Or if you don\'t need to conditionally render a bunch of tags and thus you could only check it inside a tag attribute, then you can use the EL conditional operator ${condition? valueIfTrue : valueIfFalse}
:
<c:out value=\"${empty var1 ? \'var1 is empty or null\' : \'var1 is NOT empty or null\'}\" />
To learn more about those ${}
things (the Expression Language, which is a separate subject from JSTL), check here.
See also:
- How does EL empty operator work in JSF?
to also check blank string, I suggest following
<%@ 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>
It also handles nulls
if you check only null or empty then you can use the with default option for this:
<c:out default=\"var1 is empty or null.\" value=\"${var1}\"/>
This code is correct but if you entered a lot of space (\' \') instead of null or empty string
return false.
To correct this use regular expresion (this code below check if the variable is null or empty or blank the same as 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>
Here\'s the one liner.
Ternary operator inside EL
${empty value?\'value is empty or null\':\'value is NOT empty or null\'}
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>
Here\'s an example of how to validate a int and a String that you pass from the Java Controller to the JSP file.
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>