6

我是Spring的新手,我有一个问题。我有一个用于向控制器发送信息的表格。我不需要或不想让 bean 备份表单,所以我将表单commandName中的属性留空,如下所示:

<form:form action="getReportFile.html" method="post">
            <table>
                <tr>
                    <td><form:label path="field1">Field1:</form:label></td>
                </tr>
                <tr>
                    <td><form:select path="field1" items="${FieldMap}" />                        
                    </td>
                </tr>
               <tr>
                   <td><form:label path="field2">Field2:</form:label></td>
               </tr>
               <tr>
                   <td><form:input path="field2"/></td>
               </tr>
               <tr>
                   <td><input type="submit" value="Submit" /></td>
               </tr>
           </table>
       </form:form>

我收到以下错误:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute

我可以在这里看到,当你不给它一个值时,commandName它使用 default 'command',但是,我是否需要配置其他任何东西?我应该在里面放一颗'command'豆子dispatcher-servlet.xml吗?那个豆子怎么办?

我只想要一个表格来将信息发送给控制器。我真的必须创建一个 bean 来支持它吗?

4

2 回答 2

8

如果您根本不需要命令对象,请避免使用 Spring 表单并简单地使用 HTML 表单。

所以,改变

<form:form action="getReportFile.html" method="post">
     .
     .
     .
</form:form>

<form action="getReportFile.html" method="post">
     .
     .
     .
</form>

命令对象确实不是强制性的。仅当您使用 Spring 的形式(如<form:form></form:form>使用以下库)时,它才是强制性的。

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

request.getParameter("paramName")如果您使用 HTML 表单,则必须使用该方法接收请求参数。


如果您没有表单支持 bean,则不能使用 Spring 标记,因为它确实需要一个!该标记上的“路径”属性应该指定模型 bean 属性的路径以进行数据绑定。

http://forum.springsource.org/showthread.php?83532-how-to-have-form-without-command-object&p=279807#post279807

于 2013-02-05T01:08:25.090 回答
3

我不知道是否可以在 Spring MVC 中制作一个没有支持 bean 的表单,但我认为如果不使用 bean,你不会从 Spring MVC 中获得太多东西。您正在使用的那些表单标签(如表单:输入)绑定到支持 bean 的属性,这使您可以附加验证、错误消息、类型转换等内容。您的意图是否只是将表单发布到 Spring 控制器,并使用“request.getParameter('field1')”之类的代码处理服务器上的所有表单字段?然后我建议只使用纯 HTML 表单。

于 2013-02-04T22:58:53.490 回答