一尘不染

使用Struts 2从JSP重新填充ArrayList

jsp

这是我用来重新填充的表格 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()


阅读 236

收藏
2020-06-08

共1个答案

一尘不染

意外异常捕获到在类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向每个对应Question对象发送单个消息,而不是List<String>向第一个Question对象发送消息。

2020-06-08