我想为我的应用程序的某些类应用分页,其中我使用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.jsp
。 country.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'
此类错误的解决方案是什么?
答案 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>