<c:if>标签中empty的用法
2013-12-26 16:12
393 查看
在做jsp系统的时候经常会使用el标签,而empty是使用比较多的一个,这个标签也很方便。但是一直只是会用,从来都没有好好的去思考它的执行原理,所以在写这个之前碰到了一点错误,先来看看我的错误:
Html代码
<c:if test="${not empty order.shipphone>
${order.shipphone}
</c:if>
这个语句想实现的效果很简单就是进行判断如果值不为null的话才会输出,但是这样却没有实现我要的效果,页面中输出了null,这就奇怪了既然${order.shipphone}已经为null了,这个判断执行的话应该是不允许它通过的,为什么又通过了。于是去查询了一下数据库,得到如下:
于是乎就更加迷惑了,对啊值是空的啊,最后实在没办法,只好求助java群了,其中一个的话让我好好思考了一下:
是不是因为${order.shipphone}是字符串的“null”
最后再去看了一下empty的用法:
<c:if test="${! empty key}">${key}</c:if>
<c:if test="${empty key}">所有</c:if>
当key不为空时输出key的值。当key为空时,输出“所有”
规则:
若key为null时,返回true
若key为空String时,返回true
若key为空Array时,返回true
若key为空Map时,返回true
若key为空Collection时,返回true
否则,返回false
从上面可以看出,如果是字符串null的话,这个判断当然是true,也就是说order中的shipphone本身并不为null,它有值,并且值为null,就是这个解释。
Html代码
<c:if test="${not empty order.shipphone>
${order.shipphone}
</c:if>
这个语句想实现的效果很简单就是进行判断如果值不为null的话才会输出,但是这样却没有实现我要的效果,页面中输出了null,这就奇怪了既然${order.shipphone}已经为null了,这个判断执行的话应该是不允许它通过的,为什么又通过了。于是去查询了一下数据库,得到如下:
于是乎就更加迷惑了,对啊值是空的啊,最后实在没办法,只好求助java群了,其中一个的话让我好好思考了一下:
是不是因为${order.shipphone}是字符串的“null”
最后再去看了一下empty的用法:
<c:if test="${! empty key}">${key}</c:if>
<c:if test="${empty key}">所有</c:if>
当key不为空时输出key的值。当key为空时,输出“所有”
规则:
若key为null时,返回true
若key为空String时,返回true
若key为空Array时,返回true
若key为空Map时,返回true
若key为空Collection时,返回true
否则,返回false
从上面可以看出,如果是字符串null的话,这个判断当然是true,也就是说order中的shipphone本身并不为null,它有值,并且值为null,就是这个解释。
相关文章推荐
- <applet>和<object>标签的用法区别研究二
- 在使用struts标签时,把<s:if>中的test写成了text
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:set><c:if><c:foreach>标签的应用
- Jstl标签<c:if>的用法
- 前端工程师所不知道的<meta>标签用法
- Jstl标签<c:if>的用法
- JSP的<c:choose> <c:forEach> <c:if> <c:when> <c:set>标签
- <s:if>用法
- JSTL标签用法:<c:choose><c:forEach><c:if><...
- <c:if>标签中的test可以比较两个el表达式中的值
- <meta>标签用法
- <s:property>标签的用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <meta>标签用法
- <meta>标签的用法
- <s:action>标签的用法
- html <head>标签中<meta>的用法
- <meta>标签用法
- <s:if>标签判断的使用