簡體   English   中英

Spring Webflow IllegalStateException:BeanResult的BindingResult和普通目標對象都不可用作請求屬性

[英]Spring Webflow IllegalStateException: Neither BindingResult nor plain target object for bean name available as request attribute

我的最終目標是建立一個帶有注釋的模型,並對表單輸入進行驗證。 我已經嘗試通過編寫一些驗證器來進行此操作,但是它不起作用(該表單甚至不會顯示我可以輸入sp的字段,因此沒有任何可以測試驗證的字段),因此我從頭開始嘗試了一下。 第一步,我只想在開始任何形式的驗證之前使模型綁定生效。

作為一個簡單的嘗試,我使用了mailItemModel形式http://www.javabeat.net/introduction-to-spring-web-flow-swf/

我在servlet-config.xml中添加了以下行,該行在web.xml中鏈接:

<mvc:annotation-driven />   
<context:annotation-config />
<context:component-scan base-package="com.mypackage.kumo.**" /> 

我從另一本教程中學到了這一點,我有點想這將是掃描整個程序包,而無需在變量中明確指定所有模型。 我得到了名義上的錯誤。 我也嘗試將“ @Component”添加到模型類。 但這並沒有改變任何東西。

然后我嘗試將其添加到流XML中

<var name="MailItemModel" />

從上面的鏈接教程開始。 我收到錯誤消息,該元素var“需要一個” class“屬性。因此我將其改為:

<var name="MailItemModel" class="com.mypackage.kumo.model.MailItemModel" />

但這只會引發與以前非常相同的錯誤。

我的流程現在看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=" 
        http://www.springframework.org/schema/webflow 
        http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd"
    start-state="Start">

    <var name="MailItemModel" class="com.mypackage.kumo.model.MailItemModel" />

    <view-state id="Start" view="/Search" model="MailItemModel">
        <transition on="entered" to="temp" />
        <transition on="cancel" to="SubEnde" />
    </view-state>

    <view-state id="temp" view="/End" />

    <view-state id="SubEnde" view="/Start" />    
</flow>

Search.jsp(表格摘錄)

<form:form method = "post" modelAttribute = "mailItemModel">
      Mail Username: <form:input path="username" />
         <br />
       <input type="submit" name="_eventId_entered" value="Entered" />
       <input type="submit" name="_eventId_cancel" value="Cancel" />
</form:form>

Start.jsp和End.jsp只是具有某些lorem ipsum內容的靜態jsps。

Stacktrace:

root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'mailItemModel' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_form_005finput_005f0(Search_jsp.java:559)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_form_005fform_005f0(Search_jsp.java:522)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_dsx_005fcontent_002dbox_005f0(Search_jsp.java:478)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_dsx_005fcontent_005f0(Search_jsp.java:439)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_dsx_005fhtml_002dbody_005f0(Search_jsp.java:375)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspx_meth_dsx_005fhtml_005f0(Search_jsp.java:293)
    org.apache.jsp.WEB_002dINF.jsp.Search_jsp._jspService(Search_jsp.java:126)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
    org.springframework.webflow.mvc.servlet.ServletMvcView.doRender(ServletMvcView.java:55)
    org.springframework.webflow.mvc.view.AbstractMvcView.render(AbstractMvcView.java:187)
    org.springframework.webflow.engine.ViewState.render(ViewState.java:296)
    org.springframework.webflow.engine.ViewState.refresh(ViewState.java:243)
    org.springframework.webflow.engine.ViewState.resume(ViewState.java:221)
    org.springframework.webflow.engine.Flow.resume(Flow.java:545)
    org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:258)
    org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169)
    org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
    org.springframework.webflow.mvc.servlet.FlowController.handleRequest(FlowController.java:174)
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我究竟做錯了什么? 我已經研究了其他相同錯誤的帖子,但是它們都使用@requestmapping到控制器中的URL,但是由於我使用的是Webflow,所以我不(而且似乎不能)使用控制器,所以它沒有真的沒有幫助。

您的配置有兩點缺陷

  1. 您的型號名稱錯誤
  2. 您的基本包是一個螞蟻風格的表達

在您的配置中,您將模型對象命名為MailItemModel (注意M

<var name="MailItemModel" class="com.mypackage.kumo.model.MailItemModel" />

在您看來,它的名稱為mailItemModel (注意m )。

<form:form method = "post" modelAttribute = "mailItemModel">

在流配置mailItemModel其更改為mailItemModel或者在視圖中使用MailItemModel其名稱必須匹配,包括大小寫。

關於您的配置。

<context:component-scan base-package="com.mypackage.kumo.**" /> 

base-package屬性只是要掃描的基本軟件包的名稱。 它不需要螞蟻風格的表達。 刪除結尾.**

<context:component-scan base-package="com.mypackage.kumo" /> 

最后要注意的是,使用<context:component-scan … />暗含了<context:annotation-config />因此您可以刪除該行配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM