Primefaces 5.1中包含多个文件的文件上传失败

盖茨切特

我尝试使用PF 5.1和OmniFaces 1.7版以素面完成文件上传。

我的.xhtml代码:

<h:form id="fileImportForm" styleClass="prepend-top"
    prependId="false">

    <div style='margin-bottom:10px'>
        <h:outputLabel value="#{msg.file_import_msg}"/>
    </div>
    <p:fileUpload id="fileImport" fileUploadListener="#{fileImport.handleFileUpload}"   
        mode="advanced"  
        update="messages"   
        multiple="true"
        label="#{msg.file_import_choose_label}" 
        uploadLabel="#{msg.file_import_upload_label}" 
        cancelLabel="#{msg.file_import_cancel_label}"       
    />  
    <p:growl id="messages" showDetail="true"/>  

</h:form>

我的后援豆:

package test.boundary;

import javax.inject.Named;
import org.primefaces.event.FileUploadEvent;
import com.haslerrail.aura.common.exception.SystemException;

/**
 * BackingBean for <code>fileImport.xhtml</code> page.
 *
 */
@Named
public class FileImport implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    public void handleFileUpload(final FileUploadEvent event) throws SystemException, InterruptedException {

        if (event == null || event.getFile() == null || event.getFile().getSize() == 0) {
            System.out.println("No file");

        }
        System.out.println(event.getFile().getFileName());
        Thread.sleep(500); // wait a little to force the exception!
    }
}

问题是,当我的handleFileUpload函数花费更长的时间来解析上传的文件(Thread.sleep(500)时,它会引发异常!该异常仅在我同时上传多个文件时才会发生。

例外:

09:47:33,171 WARN  [org.jboss.weld.Conversation] WELD-000315 Failed to acquire conversation lock in 1,000 for Conversation with id: 1
09:47:33,180 SEVERE [org.omnifaces.exceptionhandler.FullAjaxExceptionHandler] FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/pages/error/error.xhtml' will be shown.: org.jboss.weld.context.BusyConversationException: WELD-000322 Conversation lock timed out: 1
    at org.jboss.weld.context.AbstractConversationContext.activate(AbstractConversationContext.java:215) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:108) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:85) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:102) [primefaces-5.1.jar:5.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.omnifaces.filter.CacheControlFilter.doFilter(CacheControlFilter.java:226) [omnifaces-1.7.jar:1.7]
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) [omnifaces-1.7.jar:1.7]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75]  

对我来说,它看起来像是PF 5.1中的错误!还有其他想法吗?

维塞沃洛德·格洛瓦诺夫(Vsevolod Golovanov)

p:fileUpload multiple="true"根据自己的请求上传每个文件。问题是,请求同时发生,在您的情况下,这触发了会话锁定超时,因为每个请求都尝试访问同一会话。另一个问题是,JSF实际上需要客户端代码按顺序发送请求,并且其服务器端代码不是线程安全的。

我建议按顺序进行上传请求。有多种方法可以实现此目的。

  1. PrimeFaces 5.2.6及更高版本:您应该可以只使用以下sequential属性:

    <p:fileUpload sequential="true" ...
    

    (该属性已在PF Issue#403中实现。)

  2. 此答案通过配置PrimeFaces使用的jQuery File Upload Plugin提出了一种通过Javascript的方法。

  3. 添加焊接依赖关系。然后,您可以更改默认锁定超时(以不可移植的CDI方式),以便请求在服务器上形成队列。默认锁定超时为1秒。以下代码全局更改所有对话的锁定超时。

    import javax.enterprise.context.ConversationScoped;
    import javax.enterprise.context.Initialized;
    import javax.enterprise.event.Observes;
    import javax.inject.Inject;
    import javax.servlet.ServletRequest;
    import org.jboss.weld.context.http.HttpConversationContext;
    
    public class ConversationTimeoutDefaultSetter {
    
        @Inject
        private HttpConversationContext ctx;
    
        public void conversationInitialized(
                @Observes @Initialized(ConversationScoped.class)
                ServletRequest payload) {
            ctx.setConcurrentAccessTimeout(10000L); // 10 seconds
        }
    
    }
    

更新:我忘记了,它Initialized需要CDI 1.1,而您似乎正在使用1.0。您可以在进行begin对话时设置超时

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Primefaces 5 FileUploadEvent,并非所有文件都正在上传

来自分类Dev

PrimeFaces简单文件上传:NullPointerException

来自分类Dev

无法在PrimeFaces 5中直接调用widgetVar

来自分类Dev

无法在PrimeFaces 5中直接调用widgetVar

来自分类Dev

Primefaces-在多个文件上传组件中按字母顺序获取文件

来自分类Dev

Tapestry 5多个文件上传

来自分类Dev

Primefaces中自动文件上传的自定义按钮

来自分类Dev

如何在Rails 5中获得多个文件上传?

来自分类Dev

多个文件上传导致5个空的上传文件

来自分类Dev

p:工具提示,用于在PrimeFaces 5中对列内的每一行重复的图标

来自分类Dev

Primefaces5如何更改图表中的背景颜色(纯Java,无jqplot)

来自分类Dev

为什么p:ajax无法在primefaces 5和JSF2中更新h:outputText?

来自分类Dev

<p:ajax>侦听器函数中的NullPointerException:Primefaces5

来自分类Dev

上传多个文件HTML5 / PHP

来自分类Dev

在 Laravel 5 中上传多个文件

来自分类Dev

Primefaces 5-动态p:菜单问题

来自分类Dev

rich:Primefaces 5的jQuery替代品

来自分类Dev

子表中的Primefaces子表

来自分类Dev

Primefaces中的BubbleChart

来自分类Dev

Primefaces feedReader中的图像

来自分类Dev

在PrimeFaces中验证文件上传侦听器中上传图像的尺寸

来自分类Dev

在PrimeFaces中验证文件上传侦听器中上传图像的尺寸

来自分类Dev

在primefaces中绑定文件下载参数

来自分类Dev

JSF 2.2和Primefaces 4.0:文件上传后刷新图像

来自分类Dev

使用Primefaces 3.5文件上传时出错

来自分类Dev

从Primefaces p:fileUpload删除文件上传和取消按钮

来自分类Dev

使用 jsf Primefaces 将文件上传到 Web 根目录

来自分类Dev

添加 PrettyFaces 后,Primefaces 文件上传停止工作

来自分类Dev

JSF / PrimeFaces中的AJAX文件上传错误:无法读取未定义的属性“ debug”

Related 相关文章

  1. 1

    Primefaces 5 FileUploadEvent,并非所有文件都正在上传

  2. 2

    PrimeFaces简单文件上传:NullPointerException

  3. 3

    无法在PrimeFaces 5中直接调用widgetVar

  4. 4

    无法在PrimeFaces 5中直接调用widgetVar

  5. 5

    Primefaces-在多个文件上传组件中按字母顺序获取文件

  6. 6

    Tapestry 5多个文件上传

  7. 7

    Primefaces中自动文件上传的自定义按钮

  8. 8

    如何在Rails 5中获得多个文件上传?

  9. 9

    多个文件上传导致5个空的上传文件

  10. 10

    p:工具提示,用于在PrimeFaces 5中对列内的每一行重复的图标

  11. 11

    Primefaces5如何更改图表中的背景颜色(纯Java,无jqplot)

  12. 12

    为什么p:ajax无法在primefaces 5和JSF2中更新h:outputText?

  13. 13

    <p:ajax>侦听器函数中的NullPointerException:Primefaces5

  14. 14

    上传多个文件HTML5 / PHP

  15. 15

    在 Laravel 5 中上传多个文件

  16. 16

    Primefaces 5-动态p:菜单问题

  17. 17

    rich:Primefaces 5的jQuery替代品

  18. 18

    子表中的Primefaces子表

  19. 19

    Primefaces中的BubbleChart

  20. 20

    Primefaces feedReader中的图像

  21. 21

    在PrimeFaces中验证文件上传侦听器中上传图像的尺寸

  22. 22

    在PrimeFaces中验证文件上传侦听器中上传图像的尺寸

  23. 23

    在primefaces中绑定文件下载参数

  24. 24

    JSF 2.2和Primefaces 4.0:文件上传后刷新图像

  25. 25

    使用Primefaces 3.5文件上传时出错

  26. 26

    从Primefaces p:fileUpload删除文件上传和取消按钮

  27. 27

    使用 jsf Primefaces 将文件上传到 Web 根目录

  28. 28

    添加 PrettyFaces 后,Primefaces 文件上传停止工作

  29. 29

    JSF / PrimeFaces中的AJAX文件上传错误:无法读取未定义的属性“ debug”

热门标签

归档