2010-07-02 72 views
0

我的出发问题是这样的错误消息:Spring MVC的一种形式供给数据为另一种形式

问题访问/segment.htm。 原因:

Neither BindingResult nor plain target object for bean name 

“acceptCorrected”可以作为要求 属性

什么我工作的顶层描述是这样的:

Form1中征求用户的某些输入。当form1提交时,我需要通过一些处理来推送数据,然后呈现包含处理结果的form2。我试图通过form1的控制器的onSubmit返回的模型来将form1的结果传递给form2。

reason认为这是禁忌。

但是,如果是这样,在为form2呈现JSP页面时,如何从1获得数据以供使用?

<bean name="/segment.htm" class="com.basistech.rseharvest.SegmentFormController"> 
    <property name="sessionForm" value="true"/> 
    <property name="commandName" value="segment"/> 
    <property name="commandClass" value="com.basistech.rseharvest.Segment"/> 
    <property name="validator"> 
    <bean class="com.basistech.rseharvest.SegmentValidator"/> 
    </property> 
    <property name="formView" value="segment"/> 
    <property name="successView" value="showSegmented"/> 
    <property name="segmenter" ref="segmenter"/> 
</bean> 

<!-- the page to enter text --> 
<bean name="/showSegmented.htm" class="com.basistech.rseharvest.AcceptCorrectedFormController"> 
    <property name="sessionForm" value="true"/> 
    <property name="commandName" value="acceptCorrected"/> 
    <property name="commandClass" value="com.basistech.rseharvest.AcceptCorrected"/> 
    <property name="validator"> 
    <bean class="com.basistech.rseharvest.CorrectionsValidator"/> 
    </property> 
    <property name="formView" value="showSegmented"/> 
    <property name="successView" value="segment"/> 
    <property name="data" ref="data"/> 
</bean> 

回答

0

搞乱小时候似乎给我留下了一个答案。我不确定它是否完美,但它可能会帮助其他人。有很多人在这个问题的顶部出现了错误消息。

在Spring 2.5.6中,有一个bug或一个奇怪的限制,如下所示。如果SimpleFormController使用SimpleFormController指定另一个页面作为其successView,则第二个页面将在问题中失败。第一种形式的发布数据似乎会干扰第二种形式发生的情况。似乎有一种假设,表单提交后的下一个视图始终是非形式的。

如果第一页使用RedirectView切换到第二页,则一切正常。

有许多相互矛盾的建议,在某些情况下来自春季论坛上的冲突重击者,关于这一点。我所知道的是,我通过切换到重定向而使问题中发布的错误消失。现在,浏览器为successView创建页面的简单GET,并且该模型正确设置,并且一切正常。

请注意,RedirectView的参数是'outside'URL(在本教程中,类似blah.htm),而不是映射器映射到JSP页面的简单标记。

1

第一形式的的onSubmit返回指向第二形式一个ModelAndView,通过命名相同的视图,你看到作为第二形式的FormView的。

你能再解释一下这是什么意思吗? “细分”视图是否呈现包含<form>的HTML的HTML,该HTML会POST到/showSegmented.htm

formBackingObject()仅在最初的GET请求页面上调用。

是否要/segmented.htm显示表格和/showSegmented.htm以处理输入值的处理?

如果是这样,那么这不是AbstractFormController的预期用法。本课程旨在用于您希望使用相同控制器来处理1)表单呈现和2)处理它的提交。

+0

我想我正在试图做你告诉我的是正确的事情。 对于form1,我有一个JSP页面和一个控制器。 form1指定,作为其successView,form2。因此,一个控制器正在处理呈现form1并处理form1的提交。 我的问题是,我想使用form1的结果来帮助渲染form2。我认为这个模型将是正确的沟通途径,但没有这样的运气。 (请参阅http://forum.springsource.org/showthread.php?p=290500&mode=threaded#post290500)。 – bmargulies 2010-07-02 21:13:41

+0

虽然我很困惑,因为您似乎在上面的代码示例中张贴了两个表单控制器。当使用AbstractFormController(及其子类)时,我相信预期的用法是表单呈现(GET)和处理提交(POST)都使用相同的控制器实例(和URL映射)。换句话说,您只需要一个控制器映射和一个URL。 – 2010-07-03 14:31:10

+0

您是否看过“开发Spring Framework MVC应用程序的分步指南”教程?看起来不像它已经更新为3.0,但它是一个很好的起始资源http://static.springsource.org/docs/Spring-MVC-step-by-step/表单控制器上的部分可能会有所帮助http:// static.springsource.org/docs/Spring-MVC-step-by-step/part4.html#step4.6 – 2010-07-03 14:34:46