我有一个struts2选择列表,我希望列表来自'sub'对象,就像'name'可以设置为'sub'对象一样。此代码有效:
<s:select name="person.town" id="ddlTown" list="towns"/>
我的表单对象有一个'person'对象属性和'towns'List属性。因此,当显示表单时,调用form.getTowns()来填充选择列表,并在提交表单时,表单实例化Person对象,然后调用Person.setTown()来设置值。
我想要的是这样的:
<s:select name="person.town" id="ddlTown" list="listholder.towns"/>
因此,当显示表单时,调用form.getListholder()。getTowns()来填充选择列表。但是我得到了错误:
The requested list key 'listholder.towns' could not be resolved as a collection/array/map...
有没有办法做到这一点,以便我的表单对象不必直接包含我的所有列表对象?
*编辑*
Andrea Ligios和其他人:对此感到困惑。是的,表单表示'动作',我称之为'表单',因为标签是
<s:form action="addperson_act" method="post" id="addperson_form" name="addperson_form"
但它确实是 mypkg.addPersonAct 对象。此表单上有超过10个下拉列表,所以我有
class mypkg.AddPersonAct {
List<String> towns;
List<String> states;
List<String> countys;
List<String> countrys;
. . .
等。与所有的getter / setters。问题是这些10多个列表(以及20多个getter / setter)在其他2个动作/表单对象中重复,因为这个应用程序的结构方式,所以它的混乱和更多工作需要进行更改。我想要做的是拥有一个包含所有这些列表的对象:
class AddPersonLists {
List<String> towns;
List<String> states;
List<String> countys;
List<String> countrys;
. . .
所有的getter / setter。这样,3个动作/表单对象只需要一个属性和getter:
class mypkg.AddPersonAct {
private AddPersonList listHolder;
public getListHolder {
return listHolder;
}
因此,这些列表,它们如何被实例化,以及getter / setter方法包含在一个对象中,而不是在3中重复。
仅供参考:我之前没有进行过web开发,并继承了这段代码及其结构化方式。拥有3个具有所有相同属性的Action对象似乎是错误的,但我没有时间重做/重新构建此应用程序的工作方式。
答案 0 :(得分:1)
你可以这样做
在行动中你有AddPersonAct.java
public class AddPersonAct {
private AddPersonLists listHolder;
public void setListHolder(AddPersonLists listHolder) {
this.listHolder = listHolder;
}
public AddPersonLists getListHolder() {
return listHolder;
}
}
在Action类
中private AddPersonAct addpersonact;
//getter
//setter
在jsp中
<s:select name="person.town" id="ddlTown" list="addpersonact.getListHolder().getTowns()"/>