如何使用foreach标记访问struts2中的嵌套元素?
Struts 2中有以下问题 让我们假设我有一个这样的类如何使用foreach标记访问struts2中的嵌套元素?,struts2,nested,loops,Struts2,Nested,Loops,Struts 2中有以下问题 让我们假设我有一个这样的类 class User { private String name; private String address; public String getName() { return name;} public String getAddress() { return address;} } 以及ValueStack上可用的用户列表,名为:users 以及ValueStac
class User {
private String name;
private String address;
public String getName() { return name;}
public String getAddress() { return address;}
}
以及ValueStack上可用的用户列表,名为:users
以及ValueStack上可用的用户属性列表,如:userProps。
在本例中,userProps将是{name,address}
现在,我想遍历用户列表,并通过userProps日常访问一个用户属性
以下是如何:
<s:iterator value="#users" var="user">
<s:iterator value="#userProps" var="prop">
**<%--- HOW to get user.name, user.address ???%>**
<s:property value="#user.%{#prop}"/>
</s:iterator>
</s:iterator>
****
我不知道如何评估#user.#数据以获得#user.name或#user.address的值
谢谢。首先,您的示例中的行是否正确?你不应该尝试:
<s:property value="#user.%{#prop}"/>
第二,你试过使用帕伦斯吗?比如:
<s:property value="#user.(#prop)"/>
根据OGNL文档,它可能会做你想做的事情(我自己还没有尝试过)
如果这没有帮助,也许OGNL的索引属性支持会有所帮助。请参阅末尾的OGNL对象索引属性部分
Struts2似乎不支持双重评估。。。这正是我试图做的 但这是我的解决办法
<%
ValueStack vs = ActionContext.getContext.getValueStack();
%>
<s:iterator value="#users" var="user">
<s:iterator value="#userProps" var="prop">
<%
String userProp =(String) vs.findValue("#prop");
Object userPropVal = vs.findValue("#users."+userProp);
vs.getContext().put("userPropValKey", userPropVal);
%>
<s:property value="#userPropValKey"/>
</s:iterator>
</s:iterator>
塔达拉。。而且它有效 太好了,应该提供双重评估。总之,我所做的是: 创建的方法在Action类中接受参数,Bec Action在Valustack中,您可以直接调用传递需要双重验证的值的方法 你可以从任何地方打电话
public Object findValueFromValueStack(String objectRef,String expression){
//get valuStack
//Get value for expression
//Then pass the value and scoped object reference to get the final value..
}
最简单的解决方案是: 您需要包装
ActionSupport
并实现一种方法,即eval
public class ActionSupportWrapper extends ActionSupport {
...
public Object eval(String name) {
return ActionContext.getContext().getValueStack().findValue(name);
}
}
然后,您可以在jsp中执行您要求的操作
<s:iterator value="#users" var="user">
<s:iterator value="#userProps" var="prop">
<s:property value="eval('#user.'+#prop)"/>
</s:iterator>
</s:iterator>
没有评论权限的用户评论():我必须将
eval(#user++.++#prop)
更改为eval(#user.++#prop)
,才能让这个答案起作用。
<myPrefix:eval value="'#user.'+#prop" />