可以Struts2:select从间接对象中获取列表吗?

时间:2014-07-02 23:28:08

标签: forms list struts2

我有一个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对象似乎是错误的,但我没有时间重做/重新构建此应用程序的工作方式。

1 个答案:

答案 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()"/>