使用spring和bean列表创建表单

时间:2013-11-15 22:37:34

标签: java spring spring-mvc

我知道我的问题也有类似的问题,但是我无法让它发挥作用。但请耐心等待。

这是我的豆子

public class FLTQuestionnaireBean
{
    private int myQuestionId;
    private int myQuestionNum;
    private String myQuestion;
    private String myQuestionAnswer;
    private String myQuestionType;
    private String myQuestionModule;
    private String myQuestionStrand;
    private String myQuestionDifficulty;

    // getters and setters here
}

我的包装类:

public class QuestionnaireBeanWrapper
{
    private List<FLTQuestionnaireBean> myQuestionnaireBeanList;

    public void add( FLTQuestionnaireBean questionnaireBean )
    {
        myQuestionnaireBeanList.add( questionnaireBean );
    }

        //getter and setter here
}

编辑:将modelAttribute从$ {wrapper}更改为“wrapper” 春天表格

<form:form id="reading-form" action="../index/FLT_evaluate_reading.do" method="POST" modelAttribute="wrapper">
     <c:forEach items="${ wrapper.questionnaireBeanList }" varStatus="i">
           <form:input path="questionnaireBeanList[${i.index}].questionId" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionNum" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].question" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionAnswer" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionType" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionModule" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionStrand" type="text"/>
           <form:input path="questionnaireBeanList[${i.index}].questionDifficulty" type="text"/>
      </c:forEach>
</form:form>

控制器

@RequestMapping( value = "/index/FLT", method = RequestMethod.GET )
public String indexFLT( @RequestParam( defaultValue = "" )
String message, @RequestParam( defaultValue = "" )
String messageType, ModelMap model )
{
    model.addAttribute( "message", message );
    model.addAttribute( "messageType", messageType );

    QuestionnaireBeanWrapper wrapper = new QuestionnaireBeanWrapper();
    wrapper.add( new FLTQuestionnaireBean() );
    wrapper.add( new FLTQuestionnaireBean() );

    model.addAttribute( "wrapper", wrapper );

    return "als-questionnaire/flt";
}

我在运行应用程序时遇到异常。我从第一个<form:input..开始收到错误我的堆栈跟踪:

编辑:更改stactrace

   java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'com' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116)
...

你能告诉我我做错了什么吗?我真的需要帮助。提前致谢。

2 个答案:

答案 0 :(得分:2)

在包装类中检查get-er的拼写它应该是这样的

public List<FLTQuestionnaireBean> getQuestionnaireBeanList{
return myQuestionnaireBeanList
};

答案 1 :(得分:1)

更改此

<form:form id="reading-form" action="../index/FLT_evaluate_reading.do" method="POST" modelAttribute="${ wrapper }">

<form:form id="reading-form" action="../index/FLT_evaluate_reading.do" method="POST" modelAttribute="wrapper">

form标记的modelAttribute元素需要模型属性的名称,而不是您从toString()获得的对象本身(或更确切地说是${wrapper}结果)。

提示是

  

BindingResult和bean名称的明确目标对象'com'

我确定你是否

wrapper.toString()

并在控制器中打印结果,您将看到类似

的内容
com.somepackage.QuestionnaireBeanWrapper

它尝试使用它来解析模型属性,在.之前解析每个标记,在Model属性中找不到的第一个标记失败。在这种情况下,com属性中没有任何名为Model的内容,因此会抱怨并失败。