使用DisplayTag Library Framework通过Struts2进行分页

时间:2009-04-22 13:25:37

标签: java struts2

我想为我的应用程序的某些类应用分页,其中我使用spring,struts2&冬眠。这里我从welcome.jsp文件调用action类。它有以下代码:

<s:form action="marketing/allCountry.action">  
         <s:submit value="Click"></s:submit>  
         </s:form>  

现在,我的allCountry.action类java包含以下代码:

public String executeAction() throws Exception {
        try {
            countryList = new ArrayList<Country>();
            countryList = this.countrySecurityProcessor.findByAll(0, null, null, null, null, false, false, null, null, null, null, 0);
            System.out.println("countryList = "+countryList);
            return ActionSupport.SUCCESS;

        } catch (Exception ex) {
            return ActionSupport.ERROR;
        }
}

它正确地获取数据,我通过打印countryList对象来确认。但现在我从SUCCESS重定向到country.jspcountry.jsp的代码是:

<display:table list="countryList" requestURI="CountryAllAction" pagesize="3">
    <display:column property="id" title="ID" />
    <display:column property="name" />
</display:table>

现在,在执行我的应用程序时,我得到运行时错误,如:

  

javax.servlet.ServletException:javax.servlet.ServletException:   例外:[。LockupUtil]在对象类型中查找属性“id”时出错   “java.lang.String中”。原因:未知属性'id'

此类错误的解决方案是什么?

5 个答案:

答案 0 :(得分:2)

您需要在行动中为countryList设置一个getter。

List<Country> countryList = new ArrayList<Country>();

public String executeAction() throws Exception {
  try {
     countryList = this.countrySecurityProcessor.findByAll(0, null, null, null, null, false, false, null, null, null, null, 0);
     System.out.println("countryList = "+countryList);
     return ActionSupport.SUCCESS;

  } catch (Exception ex) {
     return ActionSupport.ERROR;
  }

}

public List<Country> getCountryList() {
  return countryList;
}

答案 1 :(得分:0)

我不熟悉Struts2,但似乎DisplayTag在任何范围内都找不到你的countryList。

我没有看到你将countryList放入或请求。如果我不对,可能需要指定表单名称 <display:table list="${yourStrutsFormName.countryList}" ...

答案 2 :(得分:0)

您需要向DisplayTag提供“countryList”,例如做类似的事情:

   request.setAttribute("countryList", countryList);

在你的行动中(除非有一个更聪明的Struts2方式这样做)。我认为您可以通过实施ServletRequestAware

来掌握行动中的请求

您还需要确保您的Country类具有id和name属性。

答案 3 :(得分:0)

使用以下代码。而不是list属性使用name属性。

<display:table name="countryList" requestURI="CountryAllAction" pagesize="3">
 <display:column property="id" title="ID" />
 <display:column property="name" />
</display:table>

答案 4 :(得分:0)

你不需要做任何事情只需在显示标签名称中使用列表变量,即

<display:table name="yourListnameinaction">

</display>