更新struts2中textfield中的值列表

更新struts2中textfield中的值列表,struts2,iterator,Struts2,Iterator,我在Struts2中遇到了一个问题,在我的示例应用程序中,我有一个对象数组,比如人名,我需要将这些名称显示为可编辑的文本字段,我为此使用了迭代器,我成功地应用了,但当我保存相同的值并提交表单时。我得到的是整个数组,其中包含空值 比如说,在我的表单bean中,我有一个属性 姓名[]姓名 在我的JSP中,迭代器是 如果有3个名称,那么我可以在UI上获得这些名称,如果我可以用一些伪值初始化它们,但是当我编辑和sumbit时,那么名称数组不会得到更新。请在这方面帮助我在Struts2中,当您需要重新填充

我在Struts2中遇到了一个问题,在我的示例应用程序中,我有一个对象数组,比如人名,我需要将这些名称显示为可编辑的文本字段,我为此使用了迭代器,我成功地应用了,但当我保存相同的值并提交表单时。我得到的是整个数组,其中包含空值

比如说,在我的表单bean中,我有一个属性 姓名[]姓名

在我的JSP中,迭代器是


如果有3个名称,那么我可以在UI上获得这些名称,如果我可以用一些伪值初始化它们,但是当我编辑和sumbit时,那么名称数组不会得到更新。请在这方面帮助我在Struts2中,当您需要重新填充bean项列表时,您需要通过索引引用它们。请参考以下示例:

Bean类:

public class Person {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
行动类:

public class PersonAction extends ActionSupport {
    private List<Person> persons;

    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }

    //Initial Load method
    @Override
    public String execute() {
        persons = new ArrayList<Person>();

        int alpha = 65;
        for(int i = 0; i < 3 ; i++) {
            Person person = new Person();
            person.setId(i);
            person.setName(String.valueOf((char)alpha++));
            persons.add(person);
        }
        return SUCCESS;
    }

    //Function that handles the form submit
    public String updatePerson() {

        for(Person person : persons) {
            System.out.println(person.getId() + ":" + person.getName());
        }

        return SUCCESS;
    }
}
第页:


提交上述表单时,url看起来像doUpdate?persons[0]。name=A1和persons[1]。name=B1和persons[2]。name=C1。类似地,如果需要更新第一人称对象的id,您将使用表单将persons[0].id=3附加到url。在中,您可以确定预定义值是每个对象的人名。name属性用于设置呈现的html输入元素;提交表单时将在url中引用的名称。如果查看生成的html,您会有一个清晰的想法。

在Struts2中,当您需要重新填充bean项列表时,您需要通过索引引用它们。请参考以下示例:

Bean类:

public class Person {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
行动类:

public class PersonAction extends ActionSupport {
    private List<Person> persons;

    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }

    //Initial Load method
    @Override
    public String execute() {
        persons = new ArrayList<Person>();

        int alpha = 65;
        for(int i = 0; i < 3 ; i++) {
            Person person = new Person();
            person.setId(i);
            person.setName(String.valueOf((char)alpha++));
            persons.add(person);
        }
        return SUCCESS;
    }

    //Function that handles the form submit
    public String updatePerson() {

        for(Person person : persons) {
            System.out.println(person.getId() + ":" + person.getName());
        }

        return SUCCESS;
    }
}
第页:


提交上述表单时,url看起来像doUpdate?persons[0]。name=A1和persons[1]。name=B1和persons[2]。name=C1。类似地,如果需要更新第一人称对象的id,您将使用表单将persons[0].id=3附加到url。在中,您可以确定预定义值是每个对象的人名。name属性用于设置呈现的html输入元素;提交表单时将在url中引用的名称。如果查看生成的html,您会有一个清晰的想法。

使用struts2的迭代器标记,如果列表不为空,则使用:

<s:iterator value="names" status="namesStatus">
    <s:property/><br/>
</s:iterator>

使用struts2的迭代器标记,如果列表不为空,则使用:

<s:iterator value="names" status="namesStatus">
    <s:property/><br/>
</s:iterator>

谢谢你的回复。这个适合我。就我而言,这有点棘手。我只是在person对象中有另一个列表,它叫做state。如下所示:公共类状态{private int id;private String stateAbbr;…setter,getter..下面的页面亲自声明为空?我的页面有问题吗?请参阅,提交表单时,声明[%{stateStatus.count-1}].stateAbbr应该与某个人匹配。否则,它是没有用的。因此,进行以下更改:我认为计数不应该在这里使用。如果您想使用计数,我们应该这样使用。谢谢您的回答。这一个对我有效。对于我的情况,它有点像三我只是有另一个列表在person对象中,它被称为state。如下所示:公共类state{private int id;private String stateAbbr;…setter,getter..下面的页面在person中声明为null?我的页面有问题吗?请参阅,当您提交表单时,状态[%{stateStatus.count-1}].stateAbbr应该与某个人匹配。否则,它没有任何用处。因此,进行以下更改:我认为计数不应该在此处使用。如果您要使用计数,我们应该这样使用。