struts2 中, iterator 标签 取不到action中变量的值
2016-01-14 19:00
417 查看
假设有下面这个Action
然后,有下面这两个POJO
页面与上面的Action进行绑定,且在页面中,像下面这样使用了 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,这样就没问题了。
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,这样就没问题了。
相关文章推荐
- Java单例模式以及线程安全性的保证
- spring mvc中,如何在 Java 代码里,获取 国际化 内容
- struts2 下载文件
- struts2 跳转至404 页面的解决方案
- Springmvc的框架流程
- struts2 通过下拉框来手动切换国际化
- struts2 拦截器Interceptor中取得request、response
- eclipse 使用adb命令
- Eclipse的 debug 介绍与技巧
- Java Swing
- java线程的两种创建方式
- java 处理json字符串中null值
- 通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例
- Java 子类构造对象
- java file模糊匹配某文件夹下的文件并删除
- eclipse十大快捷键!
- zTree实现异步加载数据(使用SPRING MVC4+mybatis3.8)
- Java 日志管理最佳实践
- @RequestParam和@RequestBody的区别-------springMVC
- java中遍历MAP的几种方法