struts2 中, iterator 标签 取不到action中变量的值
来源:互联网 发布:网络摄像头协议 编辑:程序博客网 时间:2024/06/18 09:10
假设有下面这个Action
public class Action{ public User user; Public List<Role> allRole; // getter and setter for user and role}
然后,有下面这两个POJO
public class User { private int id; // getter and setter for id}
public class Role { private List<User> user;// getter and setter for user}
页面与上面的Action进行绑定,且在页面中,像下面这样使用了 iterator 标签
<s:iterator value="allRole" var="role"> <s:property value="user.id"> </s:iterator>
页面的本意是,在遍历 action 中 allRole 的时候,同时将 action 中 user 的id 给输出出来。
但是,你发会现,将无法获取action中user对象中的id。这是为什么呢?
因为在 iterator标签 中,通过 var 属性 声明的变量 'role' (代表了 Role 类)将被压入Struts2的 valuestack 中,且处于valuestack中第0个元素的位置。然后,OGNL在解析 ‘user.id’ 表达式 的时候,会从valuestack的第0个元素去查找。也就是说,它将先从上面的 ‘role’ 变量进行查找。恰好的是,这个 ‘role’ 变量所代表的 Role 类中,刚好也包含一个 名为 ‘user’ 的字段。这样一来,OGNL 就不会再去找 action中的user变量了。
所以,为了避免这个问题的发生,可以采用以下两个方式
① 修改字段名称,使得 action中和role中不要存在同名变量名
② 通过指定下标,让OGNL解析的的时候,直接从 valuestack 的指定元素进行查找,如上例可以修改为:
<s:property value="[1].user.id"/>
这样一来,OGNL就可跳过 valuestack中的第0个元素,直接从第 1 个元素开始查找 user,这样就没问题了。
0 0
- struts2 中, iterator 标签 取不到action中变量的值
- struts2标签<s:iterator>中取session域中的值
- action中取不到jsp传来的值
- Struts2中 JSP使用request.setAttribute()后,在Action中为什么取不到值?
- 如何将利用struts2的iterator标签遍历的对象属性传到action中
- java命名规范,action中变量写了getset方法,页面取不到值
- struts2的s:iterator标签在jsp页面获取action中数组对象
- 在jsp的<s:iterator>标签中获取action中的定义的成员变量
- Struts2中iterator标签的使用
- struts2中iterator标签的相关使用
- Struts2 中s:iterator 标签的用法
- struts2中iterator标签的使用
- STRUTS2中iterator标签的问题
- struts2中iterator标签的相关使用
- struts2中iterator标签的相关使用
- Struts2中iterator标签的使用
- struts2中iterator标签的相关使用
- struts2 iterator中if标签的使用
- CLAHE代码
- 用“运行”窗口快速打开电脑中的软件
- Windows神器 Cmder
- 软件设计模式之(二)装饰者模式
- Machine Learning:神经网络简介
- struts2 中, iterator 标签 取不到action中变量的值
- [github 教程]手把手教你最简单的开源项目托管GitHub入门教程_github 教程
- eventbus学习小结
- google商店打不开,闪退 google play服务已停止
- Java学习篇之---基本数据类型
- 在Linux虚拟机和物理机之间共享文件夹
- 高精度 压四位原理及实现
- 【iOS开发】NSAttributedString和NSMutableAttributedString
- Docker Registry HTTP API V2