EL表达式中的empty和null

先说一下EL表达式中的null和empty区别,然后再说说最近在项目中出现的一个有趣的问题。

EL中的null和empty都可用来判断值是否为空,但两者存在略微的区别,

先用网上的一个小例子来演示下:


test.jsp代码:

<%@page pageEncoding="utf-8" %>

name值为:${param.name }

empty处理结果:${empty param.name }

==null处理结果:${param.name == null }

第一种情况:地址栏输入:http://127.0.0.1:8080/test.jsp

显示:

name值为:

empty处理结果:true

==null处理结果:true

第二种情况:地址栏输入:http://127.0.0.1:8080/test.jsp?name=

显示:

name值为:

empty处理结果:true

==null处理结果:false

分析:第一种情况的name=null,第二种情况的name=“”

empty表达式对于name=null和name=”“的识别是一样的,都返回true;

==null表达式对于name=null判断为true,而对于name=”“判断则是false;

如果非要使用==null表达式判断是否为空,需要将表达式写成如下:

${param.name == null && 
param.name!=""}

最近在做的项目中需要在页面上解析从后台传来的json数据,我把代码简化,其中有一段代码是这样的,

<c:if test="${not empty product.isExport}>isExportde 值:${product.isExport}</c:if>  

代码想实现的目的当isExport不为空时,输出isExport的值,当为空时则什么都不输出;

结果却匪夷所思,页面上竟然输出了“isExportde 值:null”。

既然页面上有信息输出,则代表isExport在判断时被识别为不为空,但是输出的isExport值怎么又是null?

那么假设isExport为空,这时候页面是不应该输出任何信息的。两种情况都说不通。

后来揣测是json字符串出错了,后台查看了json后,许久后才看出端倪来,这串json是通过httpClient从其他系统拿过来的数据,中间也不知道经过了什么,isExport变成了“null”,是“null”而不是null,也就是isExport的值是“null”字符串……尴尬,被这个小细节浪费了些许时间。

EL表达式中的empty和null的更多相关文章

  1. EL表达式中的empty运算符

  2. EL表达式中引用隐式变量

    除了在jsp中9大隐式变量(在前面文章也叫预定义变量)在转化成为servlet后_jspService中可以看到: public void _jspService(final javax.servle ...

  3. 在jsp中怎么使用Cookie?el表达式中获取cookie的问题

    初学jsp,不清楚cookie的使用方法,希望高手指点一下!   一般来说有两种办法,在JSP中使用Java的嵌入脚本. 例如: 写入Cookie <html> <head>. ...

  4. EL表达式中fn函数 (转载)

    JSTL 使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及 session中的数据的访问非常方便,但是我们在实际应用中经常需 ...

  5. java、el表达式中保留小数的方法

    Java中: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; p ...

  6. EL表达式中如何截取字符串

    EL表达式中如何截取字符串 可以截取,用fn函数:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/ ...

  7. 关于EL表达式中requestScope和param区别

    今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久. 首先在看遇到的问题: 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost ...

  8. EL表达式中的11个隐式对象

    EL表达式中定义了11个隐式对象,使用这些隐式对象可以很方便地读取到Cookie.HTTP请求消息头字段.请求参数.Web应用程序中的初始化参数的信息,EL表达式中的隐式对象具体如下: 隐式对象 作用 ...

  9. JS中如何使用EL表达式中的对象

    JS中如何使用EL表达式中的对象 2017年09月25日 15:33:09 lhpnba 阅读数:4859   1.js中使用el表达式要加双引号或单引号:'${list}' 2.js变量获取el表达 ...

随机推荐

  1. laravel-- 在laravel操作redis数据库的数据类型(string、哈希、无序集合、list链表、有序集合)

    安装redis和连接redis数据库 在controller头部引入 一.基本使用 public function RedisdDbOne() { // 清空Redis数据库 Redis::flush ...

  2. map.(parseInt)方法详解

    偶然间碰到这样一个问题: ["1","2", "3"].map(parseInt) //[ 1, NaN, NaN ] 运行结果 [ 1, ...

  3. AppScan操作手册

    AppScan操作手册 转自:http://blog.51cto.com/zhouanya/1388681   1.SQL注入 1.1.什么是sql注入 所谓SQL注入(SQL Injection), ...

  4. 使用SQLyog将Mysql中的表导出为Excel

    有时会有这样的需求:将MYSQL数据库中的某个表格导出,存为Excel文件.下面介绍步骤: 1.打开SQLyog,选中要导出的表 2.右键--备份/导出--导出表数据作为... 3.如图选择 Exce ...

  5. SDUT-3377_数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...

  6. jquery 日期和时间的逻辑,比较大小

    HTML:<ul> <li> <span>到达</span> <img class="date-s" src="/p ...

  7. CSS权值比较(读书笔记)

    1.继承0.1    标签1    类选择符10    ID选择符100 2.层叠:后面的样式会覆盖前面的样式. 3.内联样式表(标签内部) > 嵌入样式表(当前文件中) > 外部样式(外 ...

  8. iOS 开发该选择Blocks还是Delegates

    http://www.cocoachina.com/ios/20150925/13525.html 前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中 ...

  9. flask 与celery

    在flask 中使用celery 是特别简单的,celery官网都没有特别介绍如何使用. 使用celery首先要知道怎么配置celery.   1. 实例化celery celery = Celery ...

  10. 【JZOJ4882】【NOIP2016提高A组集训第12场11.10】多段线性函数

    题目描述 数据范围 解法 三分找出极值,两个二分找出极值的范围. 代码 #include<iostream> #include<stdio.h> #include<str ...