更新 struts2 中文本字段中的值列表

发布于 2024-12-11 23:29:46 字数 273 浏览 0 评论 0原文

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

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

在我的 JSP 中,我有一个迭代器,

如果有 3 个名称,那么如果我可以使用一些虚拟值初始化它们,那么我可以在 UI 上获取这些名称,但是当我编辑和提交时,“名称”数组不会更新。请在这方面帮助我

I am facing a problem in Struts2, In my sample application I have Array of objects (Say person name) , I need to display these names as a editable text fields , I am using Iterators for this , I am successful in diaplying, But When I cange the same value and submit the form. I am getting the entire array which holds null value.

Say for Exaple in my form bean I have a property
Name [] names;

In my JSP I have the iterator as

If there are 3 names then I can get these names on the UI if I can initialized them with some dummy value but when I edit and sumbit, then "names" array is not getting updated. Please help me in this regard

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

oО清风挽发oО 2024-12-18 23:29:46

在 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;
    }
}

Action 类:

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;
    }
}

Page:

<s:form action="doUpdate">
         <s:iterator value="persons" status="stat" var="person">
              <s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/><br/>
         </s:iterator>
         <s:submit value="Submit"/>
</s:form>

当您提交上述表单时,URL 将类似于 doUpdate?persons[0].name=A1&persons[1].name=B1&persons [2].name=C1.同样,如果您需要更新第一个人对象的 id,您将使用表单将 persons[0].id=3 附加到 url。在 中,您告诉预定义的value 是每个对象的人名。 name属性是设置渲染的html输入元素;提交表单时将在 url 中引用的名称。如果你查看生成的 html,你就会有一个清晰的想法。

In Struts2, when you need to repopulate the list of bean items, you need to refer them through indices. Please refer the example below:

Bean class:

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;
    }
}

Action class:

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;
    }
}

Page:

<s:form action="doUpdate">
         <s:iterator value="persons" status="stat" var="person">
              <s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/><br/>
         </s:iterator>
         <s:submit value="Submit"/>
</s:form>

When you submit the above form, the url would look like doUpdate?persons[0].name=A1&persons[1].name=B1&persons[2].name=C1. Similarly if you need to update id of the first person object, you will append persons[0].id=3 to the url using form. In the <s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/>, you tell that the predefined value is person's name, for each object. The name attribute is to set the rendered html input element; the name which will be referenced in the url when the form is submitted. You will get a clear idea if you look into the generated html.

柠檬色的秋千 2024-12-18 23:29:46

使用struts2的iterator标签,如果list不为空则使用:

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

Use the iterator tag of struts2, if list is not empty then use :

<s:iterator value="names" status="namesStatus">
    <s:property/><br/>
</s:iterator>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文