Struts2中表达式集合对象List<T>与对象<T>的取值时遇到的变量名的问题
2013-01-12 01:47
411 查看
我在action中定义了两个对象
private User user;
private List<User> users;
而后在JSP页面中进行取值
原本用的是下面这两个:一个s标签迭代,一个是表达式取值
<s:iterator value="users" var="v_user">
${v_user.name}
</s:iterator>
user.name=${user.name}
各自取出相应的值没有问题
后来异想天开改成如下形式:
<s:iterator value="users" var="user">
${user.name}
</s:iterator>
user.name=${user.name}
结果导致user.name=${user.name}取出的值永远等于s标签取出的最后一个值
将两个标签对调:
user.name=${user.name}
<s:iterator value="users" var="user">
${user.name}
</s:iterator>
user.name取得的值对s标签迭代的user.name值第一个并无影响
从这里可以猜测到,在s:iterator取值时创建了名为user的变量,与user相同,而且在取完值后仍保存在值栈的root对象,
而在取值时,优先级高于原user(这里应该不会是覆盖,如有兴趣可以去研究一下s标签源代码与值栈结构),
所以才会导致user的取值等于s:iterator标签迭代所得到的最后一个对象的值
mark!!!!!
private User user;
private List<User> users;
而后在JSP页面中进行取值
原本用的是下面这两个:一个s标签迭代,一个是表达式取值
<s:iterator value="users" var="v_user">
${v_user.name}
</s:iterator>
user.name=${user.name}
各自取出相应的值没有问题
后来异想天开改成如下形式:
<s:iterator value="users" var="user">
${user.name}
</s:iterator>
user.name=${user.name}
结果导致user.name=${user.name}取出的值永远等于s标签取出的最后一个值
将两个标签对调:
user.name=${user.name}
<s:iterator value="users" var="user">
${user.name}
</s:iterator>
user.name取得的值对s标签迭代的user.name值第一个并无影响
从这里可以猜测到,在s:iterator取值时创建了名为user的变量,与user相同,而且在取完值后仍保存在值栈的root对象,
而在取值时,优先级高于原user(这里应该不会是覆盖,如有兴趣可以去研究一下s标签源代码与值栈结构),
所以才会导致user的取值等于s:iterator标签迭代所得到的最后一个对象的值
mark!!!!!
相关文章推荐
- 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”
- 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。
- List 序列化与反序列化到struts2的<s:hidden>变量
- C#中List<T>对象的深度拷贝问题
- List<Object>装的是对象 排序问题
- List<T>泛型集合根据对象的某一属性排序
- LIST<>泛型集合取得对象的属性值
- List<子类>转List<父类>遇到的问题
- net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx 关于JSON对象解析List<XXX>在调用时出错问题
- 往新建的泛型集合List<T>中添加对象
- 再谈使用Emit把Datatable转换为对象集合(List<T>)
- <s:set>标签中value使用表达式变量的问题
- 将List<Object[]>数组对象转换成List<HashMap<String, Object>>集合对象
- List<Object>集合按照Object的某个字段排序,解决取不到父类字段问题
- 使用Emit把Datatable转换为对象集合(List<T>)
- 用<forEach>遍历list集合时,提示我找不到对象的属性
- 将List集合中的map对象转为List<对象>形式--封装类
- java对象和字符串互转以及json字符串转List<Object>集合
- 再谈使用Emit把Datatable转换为对象集合(List<T>)
- java向List<T>添加对象的问题