Struts2中表达式集合对象List<T>与对象<T>的取值时遇到的变量名的问题

来源:互联网 发布:电梯三菱plc编程实例 编辑:程序博客网 时间:2024/05/23 20:15

我在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!!!!!



原创粉丝点击