1

これは私が再入力するために使用しているフォームですArrayList

<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()

4

3 に答える 3

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

これは質問オブジェクトのリストであるため、質問オブジェクトに文字列を入力しようとしています。文字列を質問に変換するようにコンバーターが定義されており、xwork-conversion.propertiesファイルでも指定されているかどうかを確認してください

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

これを行う代わりに

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

これを行う

private List<Question> myQuestions;

フォームを送信すると、Actionクラスの新しいオブジェクトが作成され、インスタンス変数「myQuestions」が送信ごとに再初期化されます。

お役に立てれば :)

于 2013-03-27T04:27:40.647 に答える
2

予期しない例外がキャッチされました'クラスquiz.actions.QuizTemplateActionの'quizItem.question'の設定:値' [Ljava.lang.String;@1b3409f'の式'quizItem.question'の設定中にエラーが発生しました

List<String>インデックスを指定していないため(<s:property/>他の質問で正しく行うように...?!)、すべての質問(属性)の説明を最初の質問(オブジェクト)にとして送信しようとしています。

これを変える

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

これに

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

最初のオブジェクトではなく、String対応する各オブジェクトにシングルを送信します。QuestionList<String>Question

于 2013-03-27T11:09:32.820 に答える
0

フォームを送信すると、Struts2はフィールド名と同じ名前のパラメーターを使用します。これらのパラメーターは、値をに設定するparamsインターセプターvalueStackによってアクションに入力されます。アクションはスタックの一番上にあるため、そのプロパティが設定されます。

あなたの行動には、List<Question>しかし合格がありList<String>ます。

組み込み型変換サポート:

コレクション-オブジェクトタイプを判別できない場合は、と見なされString、新しいオブジェクトArrayListが作成されます

この問題を修正するには、次のようなインデックス付きのプロパティ名を使用します

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

于 2013-03-27T11:19:04.940 に答える