struts2 中对象名称可变时访问对象属性
Access object attribute when object name is variable in struts2
当属性名称是变量时,我在访问对象列表的特定对象属性时遇到一些问题。
这是一个示例,其中 users 是一个 User 列表,userAttributeList
是一个包含用户属性名称的 String 列表。
<%
.......
ActionContext.getContext().put("userAttributeList", request.getAttribute("userAttributeList"));
%>
<s:iterator value="users">
<s:iterator value="%{userAttributeList}" var="userAttribute">
... <s:property value="%{#userAttribute}" />
</s:iterator>
</s:iterator>
在这种情况下,属性 标签不是 return 属性值,例如 John、20-05-1990 等等,而是 return 属性名称,如 用户名、出生日期 等。
public class UserAction extends ActionSupport {
@Override
public String execute()
throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
ArrayList userAttributeList= new ArrayList();
// some logic implementation and populate the `userAttributeList`(username, birthDate, password etc)
request.setAttribute(userAttributeList, userAttributeList);
return SUCCESS;
}
}
userAttributeList
ArrayList 包含用户的属性名称。此 ArrayList 用于简化实现并为此创建动态解决方案:
<s:iterator value="users">
<s:property value="%{username}" />
<s:property value="%{birthDate}" />
<s:property value="%{password}" />
....
</s:iterator>
您只填充了用户对象的属性名称。但是没有放值。如果你想拥有用户对象的动态字段,你应该使用 Map
而不是 ArrayList
。
Map<String, Object> userAttributeMap= new HashMap<>();
userAttributeMap.put("username", "John");
userAttributeMap.put("birthDate", "20-05-1990");
....
现在 JSP 您应该使用 OGNL
评估地图键
<s:iterator value="%{userAttributeMap}" var="userAttribute">
... <s:property value="%{#userAttribute['username']}" />
<s:property value="%{#userAttribute['birthDate']}" />
</s:iterator>
当属性名称是变量时,我在访问对象列表的特定对象属性时遇到一些问题。
这是一个示例,其中 users 是一个 User 列表,userAttributeList
是一个包含用户属性名称的 String 列表。
<%
.......
ActionContext.getContext().put("userAttributeList", request.getAttribute("userAttributeList"));
%>
<s:iterator value="users">
<s:iterator value="%{userAttributeList}" var="userAttribute">
... <s:property value="%{#userAttribute}" />
</s:iterator>
</s:iterator>
在这种情况下,属性 标签不是 return 属性值,例如 John、20-05-1990 等等,而是 return 属性名称,如 用户名、出生日期 等。
public class UserAction extends ActionSupport {
@Override
public String execute()
throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
ArrayList userAttributeList= new ArrayList();
// some logic implementation and populate the `userAttributeList`(username, birthDate, password etc)
request.setAttribute(userAttributeList, userAttributeList);
return SUCCESS;
}
}
userAttributeList
ArrayList 包含用户的属性名称。此 ArrayList 用于简化实现并为此创建动态解决方案:
<s:iterator value="users">
<s:property value="%{username}" />
<s:property value="%{birthDate}" />
<s:property value="%{password}" />
....
</s:iterator>
您只填充了用户对象的属性名称。但是没有放值。如果你想拥有用户对象的动态字段,你应该使用 Map
而不是 ArrayList
。
Map<String, Object> userAttributeMap= new HashMap<>();
userAttributeMap.put("username", "John");
userAttributeMap.put("birthDate", "20-05-1990");
....
现在 JSP 您应该使用 OGNL
评估地图键<s:iterator value="%{userAttributeMap}" var="userAttribute">
... <s:property value="%{#userAttribute['username']}" />
<s:property value="%{#userAttribute['birthDate']}" />
</s:iterator>