将一组自定义对象POST到Struts 2操作

时间:2011-06-11 03:02:29

标签: java arrays post struts2 html-form

如何在Java中将一组自定义对象发布到Struts 2操作?

例如,如果我有以下Java对象:

public class Person {

    private String name;
    private String lastName;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }   
}

以下行动:

public class SavePersons extends ActionSupport {

    private List<Person> persons;

    @Override
    public String execute() throws Exception {
            // Do something
        return SUCCESS;
    }

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

}

我想在HTML表单中执行以下操作:

<html>
<body>
<form method="POST" action="http://postHere">
    <input type="text" name="persons[0].name" value="Name1"/>
    <input type="text" name="persons[0].lastName" value="LastName1"/>
    <input type="text" name="persons[1].name" value="Name2"/>
    <input type="text" name="persons[1].lastName" value="LastName2"/>
    <input type="submit" />
</form>
</body>
</html>

任何提示?

1 个答案:

答案 0 :(得分:8)

你看起来很棒。如果您发布或获取设置值,它对struts2没有任何影响。

使用相同的SavePersons类,但我添加了public List<Person> getPersons()方法。这是使解决方案有效的必要条件。

并且使用基本相同的表单,除了我更喜欢使用s2标签编写我的表单有意义(什么让一些人离开表单标签是默认的s2主题,你可以全局设置主题简单,标签属性将不起作用,但UI标签将像您期望类似的html元素一样工作):

<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html> 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Person Form</title>
    </head>
    <body>
        <h1>Person Form</h1>
        <s:form action="person-test" method="post">
            <s:textfield name="persons[0].name" label="fName 1"/>
            <s:textfield name="persons[0].lastName"  label="lName 1"/>
            <s:textfield name="persons[1].name" label="fName 2"/>
            <s:textfield name="persons[1].lastName" label="lName 2"/>
            <s:submit/>
        </s:form>
    </body>
</html>

请注意,不需要method =“post”,它是默认值。

以下是用于显示表单数据的页面。

<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html> 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>List of People</h1>
        <s:iterator value="persons">
            <s:property value="name"/> <s:property value="lastName"/><br/>
        </s:iterator>
    </body>
</html>

它运作得很好。