我想将Struts2 select
标记设置为request
对象的变量,而不是动作类变量。
我的操作类是:
public class showSchdulesAction extends ActionSupport
public String execute() throws Exception {
...
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("repTypList",someObj.getCommonList());
...
}
}
我的JSP页面:
...
<s:select onchange="genRpt(this)" list="%{repTypList}" listKey="id" listValue="val" >
</s:select>
...
我想将repTypeList
从请求对象设置为select
标记。
当我使用list="%{repTypList}"
或list="repTypList"
时
我收到了错误:
tag 'select', field 'list': The requested list key '%{repTypList}' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name}
当我使用list="#{repTypList}"
它正在工作但组合选项中没有显示任何值,甚至列表中的值。
答案 0 :(得分:3)
没有理由在Struts2中从请求中获取对象。如果您使用Struts2标记,则可以通过OGNL从valueStack
获取对象。但是在Struts2中可以使用OGNL从请求属性中获取值。为此,您应该访问OGNL上下文变量request
。例如
<s:select list="%{#request.repTypList}" listKey="id" listValue="val" />
select
标记要求null
标记中的OGNL表达式不返回list
值,因为null
值导致错误。因此,最好在返回结果之前在操作中进行检查。
public class showSchdulesAction extends ActionSupport
public String execute() throws Exception {
...
HttpServletRequest request = ServletActionContext.getRequest();
List list = someObj.getCommonList();
if (list == null) list = new ArrayList();
request.setAttribute("repTypList", list);
...
}
}
此代码可以帮助您避免上述错误。
答案 1 :(得分:1)
你有没有试过这个..
list="%{#repTypList}"
或强>
list="%{#request.repTypList}"
struts 2中的选择标签