2013-03-27 89 views
1

這是我使用重新填充ArrayList重新填充的ArrayList使用Struts 2

<form method = "POST" action = "addItemsToTemplate"> 
    <s:iterator value = "myQuestions" var = "quizItem" status="key"> 
     <s:textfield name = "quizItem.question"/> 
    </s:iterator> 
    <input type = "submit" value = "submit"/> 
</form> 

形式這是動作類

public class QuizTest extends ActionSupport{ 



    public String execute(){ 

      List<Question> q= myQuestions; 
      System.out.println(myQuestions); 

      return "success"; 
     } 


    public String populateQuestions(){ 
      //more code here 
    } 

    public void setMyQuestions(List<Question> myQuestions) { 
     this.myQuestions = myQuestions; 
    } 
    private List<Question> myQuestions = new ArrayList<Question>(); 

} 

哪裏myQuestions是問對象列表。提交後,這給我一個錯誤

Unexpected Exception caught setting 'quizItem.question' on 'class quiz.actions.QuizTemplateAction: Error setting expression 'quizItem.question' with value '[Ljava.lang.String;@1b3409f' 

System.out.println(myQuestions);打印一個空列表。但myQuestions已經被從另一個用這種方法populateQuestions()填充,提交表單

回答

2

意外捕獲到異常,設置 'quizItem.question' 上 ' 類quiz.actions.QuizTemplateAction:錯誤設定表達 'quizItem.question',值爲'[Ljava.lang .String; @ 1b3409f」

您正在嘗試所有的問題(屬性)的描述送入第一個問題(對象)作爲List<String>,因爲你沒有指定索引(如你正確地<s:property/>在做你的其他問題... ?!)。

更改此

<s:textfield name = "quizItem.question"/> 

對此

<s:textfield name = "quizItem[%{#key.index}].question"/> 

要發送單String給每個記者Question對象,而不是一個List<String>到第一Question對象。

2
Where myQuestions is a List of Question Objects. 
    upon submission this gives me an error 

既然是問題的一個對象列表,你試圖填充一個String一個問題對象之前。請檢查您是否已經轉換器定義爲隱蔽字符串轉換問題,並在xwork-conversion.properties文件中指定

System.out.println(myQuestions); prints an empty list. 

而不是做這個

private List<Question> myQuestions = new ArrayList<Question>(); 

做到這一點

private List<Question> myQuestions; 

當您提交表單時,將創建Action類的新對象,並在每次提交時重新初始化實例變量「myQuestions」。

希望這有助於:)

+0

btw問題是一個抽象類 – user962206 2013-03-27 04:57:30

+0

我在哪裏罰款xwork轉換屬性文件? – user962206 2013-03-27 04:58:27

+0

當我做這個私人列表時0123tmyQuestions = new ArrayList ();它給了我一個空值 – user962206 2013-03-27 05:03:30

0

當您提交表單時,Struts2將使用與字段名相同的參數。這些參數由params interceptor填充到動作中,該值將值設置爲valueStack。由於操作位於堆棧頂部,因此它的屬性將被設置。

在你的行動中,你有一個List<Question>但通過List<String>

Built in Type Conversion Support:

藏品 - 如果不是對象類型可確定的,它被認爲是一個String和新ArrayList創建

要解決此問題使用索引屬性名稱像這樣

<s:textfield name = "myQuestions[%{#key.index}].question"/>