如何在
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>
有小费吗?
解决方法
你有什么看起来不错.如果您发布或获取设置值,它对struts2没有任何影响.
使用相同的SavePersons类,除了我添加了一个公共列表< 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>
它运作得很好.