使用多部分/表单数据和文件上传时,Spring Webflow-IllegalStateException

shimon001

我正在尝试将文件上传添加到我的Spring Webflog表单处理中。只要表单enctype没有设置为multipart / form-data,表单提交就可以了。但是,当我在Spring表单中添加enctype =“ multipart / form-data”后,就会发生此异常:

java.lang.IllegalStateException: A flow execution action URL can only be obtained in a RenderRequest or a ResourceRequest
    at org.springframework.webflow.context.portlet.PortletExternalContext.getFlowExecutionUrl(PortletExternalContext.java:215)
    at org.springframework.webflow.engine.impl.RequestControlContextImpl.getFlowExecutionUrl(RequestControlContextImpl.java:178)
    at org.springframework.webflow.mvc.view.AbstractMvcView.render(AbstractMvcView.java:189)
    at org.springframework.webflow.engine.ViewState.render(ViewState.java:293)
    at org.springframework.webflow.engine.ViewState.refresh(ViewState.java:242)
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:220)
    at org.springframework.webflow.engine.Flow.resume(Flow.java:537)
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259)
    at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169)
    at org.springframework.webflow.mvc.portlet.FlowHandlerAdapter.handleAction(FlowHandlerAdapter.java:161)
    at org.springframework.web.portlet.DispatcherPortlet.doActionService(DispatcherPortlet.java:670)
    at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:520)
    at org.springframework.web.portlet.FrameworkPortlet.processAction(FrameworkPortlet.java:461)
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:71)

我已将CommonsMultipartResolver添加到我的spring上下文中:

<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- Limit uploads to one byte smaller than the server is allowed to handle -->
  <property name="maxUploadSize" value="100000" />
</bean>

并在我的pom.xml中包含commons-fileupload.jar:

 <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
 </dependency>

我的JSP如下所示:

<portlet:actionURL var="processFormAction" >
    <portlet:param name="execution" value="${flowExecutionKey}"/>
</portlet:actionURL>
<form:form action="${processFormAction}" modelAttribute="customerModel" enctype="multipart/form-data" method="post" >
    <form:input path="firstName" cssClass="input-size-1 valid-required" />
    <form:input path="lastName" cssClass="input-size-1  valid-required" />
    <input name="avatar" id="avatar" type="file"/>
    <input type="submit" name="_eventId_submit" id="send" value="Submit"/>
</form:form>

我的flow.xml定义:

<view-state id="state1" model="customerModel">
    ...
    <transition on="submit" to="submitFormActions"/>
</view-state>

<action-state id="submitFormActions">
    <evaluate expression="portletAction.processForm(customerModel, flowRequestContext)" />
    <transition on="success" to="state2"/>
    <transition on="error" to="state1" />
</action-state>

模型对象:

public class CustomerModel implements Serializable{
    private String firstName;
    private String lastName;
    private MutlipartFile avatar;

    ...
    //public getters and setters
}

有什么想法可能是错的吗?如我所说,如果没有enctype =“ multipart / form-data”,则表单处理效果很好。

谢谢

普拉萨德

您正在使用org.springframework.web.multipart.commons.CommonsMultipartResolver,它不了解Portlet上下文。您需要将CommonsMultipartResolver更改为:

    <bean id="portletMultipartResolver"
        class="org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver">
        <!-- one of the properties available; the maximum file size in bytes -->
        <property name="maxUploadSize" value="100000"/>
    </bean>

另外,为了使DispatcherPortlet能够识别此bean,您需要如上所述定义此bean id。文档说:

    Any configured PortletMultipartResolver bean must have the following id (or name): "portletMultipartResolver". 
    If you have defined your PortletMultipartResolver with any other name, then the DispatcherPortlet will not 
    find your PortletMultipartResolver, and consequently no multipart support will be in effect.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Webflow IllegalStateException:BeanResult的BindingResult和普通目标对象都不能用作请求属性

来自分类Dev

Eventbrite与Webflow表单的集成

来自分类Dev

Spring Webflow VS AngularJS

来自分类Dev

Spring Webflow流

来自分类Dev

Spring Webflow使用大量内存

来自分类Dev

Spring Webflow使用大量内存

来自分类Dev

使用 Spring WebFlow 的谷歌 reCAPTCHA

来自分类Dev

AngularJS如何上传多部分表单数据和文件?

来自分类Dev

Spring Webflow国际化

来自分类Dev

spring webflow和MVC的区别

来自分类Dev

使用Spring WebFlow 2.4.0上传文件,未绑定参数

来自分类Dev

Spring WebFlow + Thymeleaf表单提交(无ajax !!!)

来自分类Dev

Spring Webflow清洁表单字段

来自分类Dev

Spring Webflow部分验证不起作用

来自分类Dev

Spring Webflow中的数据绑定问题

来自分类Dev

无法使用spring-webflow jars

来自分类Dev

带有Spring Webflow的Spring MVC

来自分类Dev

Spring Webflow,ID和版本被剥离

来自分类Dev

Spring Webflow-从列表中删除项目?

来自分类Dev

How to send request parameters to spring webflow controller

来自分类Dev

Spring WebFlow到MVC的转换问题

来自分类Dev

Spring Webflow 2.4.2缺少启动状态

来自分类Dev

Spring Webflow 2.4.2缺少启动状态

来自分类Dev

隐藏类在 spring webflow 中创建逗号

来自分类Dev

找不到 Spring webflow 架构 xsd

来自分类Dev

使用多部分表单数据上传文件时,我缺少什么?

来自分类Dev

如何使用发布多部分/表单数据的请求来排列数据和文件的顺序?

来自分类Dev

在Flask中上传文件,无需多部分/表单数据

来自分类Dev

使用像mysql这样的数据库进行webflow