JSTL 动态拼接 变量名称

需求:User 对象有 name_1,name_2,name_3,name_4,name_5 ...... n个这样的属性,想在JSP页面中通过 JSTL 对 User 对象进行遍历取值,写过

<c:forEach var="i" begin="1" end="100">
  ${user.name_ + i }   ${user.name_i }
</c:forEach>
等几种方式都是错误的。最后查找各种资料,才解决问题,同时发现好多朋友也碰到过类似问题,特记录下!

直接在 JSP 通过 JSTL 进行拼接属性名,是行不通的。而 Map 的 Key 可以进行拼接。那么灵感来了。

思路:

一、首先,在后台把 User 对象转换成一个 Map 

Map<?, ?> map = new BeanMap(user);
request.setAttribute("userMap", map);
我这里通过 BeanUtils 工具包把 JavaBean 对象(注意:只能是JavaBenan对象)转换成 Map 。

//用到的JAR包(版本号自己控制)
commons-beanutils-1.9.3.jar
commons-logging-1.2.jar
也可以通过别的方式进行处理:https://www.cnblogs.com/dreammyle/p/5610906.html

二、然后,在 JSP 页面进行拼接属性名

//这两种拼接方式都是错误的,因为EL表达式是没有自动类型转换的
//报这种错:javax.el.ELException: Cannot coerce 'i' to class java.lang.Long
<c:forEach var="i" begin="1" end="100">
    ${userMap[val+'i'] },
    ${userMap[val'i'] }
</c:forEach>
//正确的拼接方式,通过使用 c:set 标签实现。
<c:forEach var="i" begin="1" end="100">
    <c:set var="num2"> name_<c:out value="${i }"></c:out> </c:set>
    ${uersMap[num2] }
</c:forEach>

猜你喜欢

转载自blog.csdn.net/hbxf_xs/article/details/86588653