这是我试图通过使用JSTL / EL动态构造属性名称来引用会话bean的问题的一个非常简化的示例。会话属性的名称是“userBean”,其属性“name”具有相应的getter / setter。
This works<br>
User: ${userBean.name}<br>
<c:set var="userBeanName">${userBean}.name</c:set><br>
This does not work<br>
User: ${userBeanName}<br>
结果是:
这适用于 用户:ACOSTA SALES COMPANY
这不起作用 用户:000101.name
第二个是调用userBean类的toString()方法并连接+“。name”。
肯定有一个非常简单的答案;但是,凭借我有限的知识,我无法弄明白。
答案 0 :(得分:4)
代码示例令人困惑,与标题和第1段中所述的问题无关。所以,我将忽略代码示例,只回答标题:
如何使用动态名称访问会话属性?
您可以使用${sessionScope}
来获取所有会话属性的映射。您可以使用括号表示法将变量计算为属性名称${sessionScope[attributeName]}
。
所以,这应该做:
<c:set var="attributeName" value="userBean" />
User name: ${sessionScope[attributeName].name}