使用jstl+el表达式遇到的几个问题

1、使用jstl访问Map<Integer,String>中的内容时总取不到?

el表达式的一个bug,在解析数字的时候,会自动将数字转换成Long类型。

我的解决办法是,Map的key改成String类型。那如果这个key是我从别处取出来的,取出来就是Integer的怎么办?

那只能想办法把这个key转换成字符串类型以后再使用它从Map中取值。这直接引出了2中的问题。

 

2、在jstl的定义式中如何像在java中一样使用 i+""的方式将整型转为字符串型?

<c:set var="key" value="${parentMenu.sysMenuId}${''}"></c:set>

说明:${parentMenu.sysMenuId}${''}这种方式貌似是el的字符串拼接方式,我这样尝试结果证明是对的。

 

3、如果在页面中${someMap}表示一个Map,${someKey}代表某个key,那我怎么写取值表达式?

说明:我们都知道${someMap[key]}是取值的方式,但如果你直接这么写${someMap[${someKey}]}是无法编译的。

正确的写法是${someMap[someKey]},是的,外面如果已经有了${}里面就没必要写了,这貌似是个规律。

 

4、如何判断一个集合是否为null?如何取得一个集合的size?

(1)判断一个集合是否为null:<c:when test='${not empty sms}'> ...,切记不要忘了${},据说${!empty sms}这种写法也可以,没试。

(2)如何取得一个集合的size:${fn:length(sms)},这个fn也是jstl的标签,

但必须在jsp页面中多引入一个标签库的声明,和常用的c标签库加起来以后像这样:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

(3)我们一般判断一个集合有内容时,不但要判断其是否为空,而且同时要求size>0,那这个怎么写呢?

根据3中的经验,外面如果已经有了${}里面就没必要写了,所以这么写:

<c:when test='${not empty sms and fn:length(sms) > 0}'>

 

你可能感兴趣的:(使用jstl+el表达式遇到的几个问题)