2011-06-11 70 views
6

如何將自定義對象的數組發佈到Java中的Struts 2操作?將自定義對象的數組發佈到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> 

任何提示?

+2

**四元數**有回答你的問題。而你的問題與** [表格輸入](http://struts.apache.org/2.1.8.1/docs/tabular-inputs.html)** Struts2 – lschin 2011-06-12 05:18:35

回答

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> 

注意不需要方法=「後」,這是默認的。

以下是用於顯示錶單數據的頁面。

<%@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> 

它工作得很好。

+1

感謝您的答案。在我的情況下,問題是,如果我沒有聲明getter「getPersons」(因爲我不想在稍後閱讀列表),它不起作用,並且個人列表從不在POST上填充。 – Mark 2011-06-12 23:27:01

+0

你可以使用迭代器來創建表單嗎? – manafire 2014-03-19 22:06:51

+0

@Quaternion:@Mark對於getPersons getter是強制性的以使您的解決方案能夠正常工作這一事實擁有正確的權利。實際上二傳手不會設置人員,吸氣人員將被用於獲取人員列表,然後所有元素將開始填充。實際上,我昨天花了4個多小時(最後一個與我的4個同事)試圖弄清楚爲什麼它不起作用,你的回答「getPersons只是讀......」誤導了我們。最後添加這個getter已經解決了這個問題。 – ahmehri 2015-05-08 09:25:59