您的位置:首页 > 编程语言 > Java开发

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!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息