将Struts2选择标记设置为请求对象中的变量

时间:2014-03-15 06:31:55

标签: java jsp struts2 ognl valuestack

我想将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}"它正在工作但组合选项中没有显示任何值,甚至列表中的值。

2 个答案:

答案 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中的

选择标签