【问题标题】:Spring Webflow: The field type is requiredSpring Webflow:字段类型为必填项
【发布时间】:2023-03-08 13:29:01
【问题描述】:

我一直在为以下错误苦苦挣扎。

java.lang.IllegalArgumentException: The field type is required

我有一个设置了 3 个屏幕的基本屏幕流程。

  • 屏幕 1:身份

  • 屏幕 2:联系信息

  • 屏幕 3:摘要

从屏幕 1 中,我输入如下文本字段:

<form:form modelAttribute="booking" action="${flowExecutionUrl}" method="post">
     User Name: 
     <form:input type="text" id="username" name="username" path="username"/>
     <input type="submit" name="_eventId_next" value="next" />
     <input type="submit" name="_eventId_cancel" value="Cancel" />
</form:form>

当它点击摘要时这会起作用,因为我能够在摘要屏幕上显示 ${booking.username} 的内容。

但在屏幕 2 上,当我尝试完全相同的操作但使用不同的数据字段时,会出现上面指定的错误。

屏幕 2:

<form:form modelAttribute="booking" action="${flowExecutionUrl}" method="post">
     Address 1:
     <form:input type="text" id="address1" name="address1" path="address1"/>
     <input type="submit" name="_eventId_next" value="Next"/>
     <input type="submit" name="_eventId_cancel" value="Cancel"/>
</form:form>

这样指定的表单标签:

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

大部分代码可以看我上一个问题:

Full Code

当我尝试将表单标签添加到选项下拉框字段时,也会发生同样的错误。

<form:select id="requestType" name="requestType" path="requestType">
    <form:option value="0"></option> 
    <form:option value="1">Oprion 1</option>
    <form:option value="2">Option 2</option>
</form:select> 

我也尝试了而不是选项标签

<form:input type="text" label="" value="0"/>

都提出了相同的错误,指向这些行作为错误。

谢谢。

编辑:

堆栈跟踪: 异常

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'enterContactDetails' of flow 'flow-config'
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'enterContactDetails' of flow 'flow-config'
    org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:571)
    org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:262)
    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:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

java.lang.IllegalStateException: Exception occurred rendering view org.springframework.web.servlet.view.JstlView: name 'account/BookingContactDetailsScreen'; URL [/WEB-INF/views/account/BookingContactDetailsScreen.jsp]
    org.springframework.webflow.mvc.view.AbstractMvcView.render(AbstractMvcView.java:191)
    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:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

org.apache.jasper.JasperException: java.lang.IllegalArgumentException: The field type is required
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    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:722)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.webflow.mvc.servlet.ServletMvcView.doRender(ServletMvcView.java:50)
    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:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

java.lang.IllegalArgumentException: The field type is required
    org.springframework.util.Assert.notNull(Assert.java:112)
    org.springframework.webflow.mvc.view.ConvertingPropertyEditorAdapter.<init>(ConvertingPropertyEditorAdapter.java:48)
    org.springframework.webflow.mvc.view.BindingModel.findSpringConvertingPropertyEditor(BindingModel.java:277)
    org.springframework.webflow.mvc.view.BindingModel.getFormattedValue(BindingModel.java:235)
    org.springframework.webflow.mvc.view.BindingModel.getFieldValue(BindingModel.java:142)
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
    org.apache.jsp.WEB_002dINF.views.account.BookingContactDetailsScreen_jsp._jspx_meth_form_005finput_005f0(BookingContactDetailsScreen_jsp.java:230)
    org.apache.jsp.WEB_002dINF.views.account.BookingContactDetailsScreen_jsp._jspx_meth_form_005fform_005f0(BookingContactDetailsScreen_jsp.java:127)
    org.apache.jsp.WEB_002dINF.views.account.BookingContactDetailsScreen_jsp._jspService(BookingContactDetailsScreen_jsp.java:85)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    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:722)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.webflow.mvc.servlet.ServletMvcView.doRender(ServletMvcView.java:50)
    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:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

【问题讨论】:

  • 你能发布stacktrace吗?
  • 我按照你的要求添加了
  • 我怀疑这是否搞砸了,但您是否意识到您的form:form 中不需要action="${flowExecutionUrl}"method="post"?此外,input 字段上的name 属性也不正常。我想知道这是否会使它感到困惑。 static.springsource.org/spring/docs/3.0.x/…
  • 我开始添加我能想到的任何东西来尝试修复这个错误。因此,如果有不必要的字段,那可能就是原因。没有您指定的内容的干净版本会产生相同的错误,很遗憾这不是问题。
  • 另外,您不应该在字段上定义类型。类型由标签决定,例如

标签: spring spring-mvc tags spring-webflow


【解决方案1】:

您不需要提供表单操作。你应该让你的表单开始标签看起来像下面的示例:

<form:form method="POST" modelAttribute="booking">

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多