То, что у тебя хорошо выглядит.Это не имеет значения для 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>
И она работала просто отлично.