POST массив пользовательских объектов для действия Struts 2 - PullRequest
6 голосов
/ 11 июня 2011

Как мне поместить массив пользовательских объектов в действие Struts 2 в Java?

Например, если у меня есть следующий объект 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 Ответ

8 голосов
/ 11 июня 2011

То, что у тебя хорошо выглядит.Это не имеет значения для struts2, если вы публикуете или получаете значения настроек.

Использование того же класса SavePersons, за исключением того, что я добавил метод public List<Person> getPersons().Это необходимо для того, чтобы решение работало.

И использование по существу той же формы, за исключением того, что я предпочитаю писать свои формы, используя теги s2, где это имеет смысл (то, что отталкивает некоторых людей от тегов форм, является темой s2 по умолчанию)., вы можете глобально установить тему простой, атрибут label не будет работать, но теги пользовательского интерфейса будут работать так же, как и вы ожидаете, что аналогичные 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>

И она работала просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...