2010-01-09 48 views
2

我們正在使用struts 2.0.14並面臨問題,從JSP向動作類設置了索引屬性。設置從JSP到動作類的索引屬性的問題

代碼看起來與此類似。

public class MyExample extends ActionSupport 
     { 

      private List<Person> persons; 
      private List<String> names; 

      public String execute() 
      { 
       //persons = myDAO.readPersons(names); 
       return SUCCESS; 
      } 

      public String update() 
      { 
       for (Person p : persons) 
       { 
        System.out.println(p.getName() + "---" + p.getAddress().getStreet()); 
       } 
       return SUCCESS; 
      } 

      // Getters and setters  
     } 

     class Person 
     { 
      private Address address; 
      private String name; 
      // Getters and setters  
     } 

     class Address 
     { 
      private String street; 
      private String number; 
      // Getters and setters  
     } 

    And JSP: 
     <%@ taglib prefix="s" uri="/struts-tags"%> 
     <%@ page language="java" pageEncoding="ISO-8859-1"%> 
     <!---- Other code ----> 
     <s:ieterate value="persons" status="status"> 
     <tr> 
      <s:textfield name="person['%{#status.index}'].name"/> 
      <s:textfield name="person['%{#status.index}'].address.number"/> 
      <s:textfield name="person['%{#status.index}'].street"/> 
     </tr> 

我可以成功地在頁面上顯示值,但是當我提交表單時,值沒有被填充。 我檢查了螢火蟲,看看這些參數是如何發佈的,它們就像人['0']。name,person ['0']。address.number等等,請讓我知道錯誤在哪裏。

回答

2

您是否嘗試了'%{#status.index}周圍?

像這樣:

<s:textfield name="person[%{#status.index}].name"/> 
2

除了去除圍繞指數的報價爲內特建議,我注意到,你的字段命名爲persons但您的參數使用person來代替。假設這是一個錯字,它應該是,例如,persons[%{#status.index}].name,確保:

  1. 你的操作有一個setPersons(List<Person> person),以便它可以創建一個新的列表和設置。
  2. PersonAddress沒有參數構造函數,因此它們可以自動創建。

如果仍然沒有工作,嘗試添加@Elementcom.opensymphony.xwork2.util.Element)到persons給它一個什麼類型的對象與填充它提示:可能是發生

@Element(value=Person) 
List<Person> persons; 

一件事是您的行動的超類之一可能實現ParameterNameAware,它按名稱過濾出參數。一個快速的方法來檢查是重寫acceptableParameterName在你的行動,看看它是否使得它的工作:

@Override 
public boolean acceptableParameterName(String name) { 
    return true; 
} 

見ParametersInterceptor API文檔瞭解詳情:http://struts.apache.org/2.0.14/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/ParametersInterceptor.html