【问题标题】:p:fileUpload doesn't work using @Autowired bean annotationp:fileUpload 使用 @Autowired bean 注释不起作用
【发布时间】:2018-03-06 09:25:22
【问题描述】:

我在尝试使用 p:fileUpload 上传文件时收到错误消息。 我尝试了 maven clean 和 maven install 来更新依赖。 我多次更改 web.xml。我相信问题在于与我的注释的关系,我正在使用@Autowired (Spring),但我将其更改为不工作。 我该如何解决这个问题?

我正在使用: Primefaces 6.0, 爪哇 8, 弹簧数据, 春季MVC

我的网络 xml:

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <url-pattern>*.jsf</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ASYNC</dispatcher>
</filter-mapping>

JSF:

<p:fileUpload id="fileDescAto" auto="true" multiple="false"
    invalidFileMessage="Tipo de Arquivo Inválido:"
    disabled="#{not empty searchDocumentoBean.descAtoArquivoFileName}"
    update="messagesDialog @this panelGroupFileDescription"
    allowTypes="/(\.|\/)(pdf)$/" sizeLimit="10485760"
    invalidSizeMessage="Tamanho de arquivo excedido (10MB):"
    fileUploadListener="#{searchDocumentoBean.adicionaArquivoUpload}"
    label="Escolher Arquivo..." mode="advanced" />

豆:

public void adicionaArquivoUpload(FileUploadEvent ev) {

        String[] name = ev.getFile().getFileName().split("\\\\");

        descAtoArquivo = ev.getFile().getContents();
        descAtoArquivoFileName = name[name.length-1];
    }

    public void removeArquivoUpload() {

        descAtoArquivo = null;
        descAtoArquivoFileName = null;
    }// GET AND SET OMITED

头部注释我的豆子:

@Component
@Scope("view")
@ManagedBean(name = "searchDocumentoBean")
@URLMappings(mappings = {       
        @URLMapping(id ="searchDocumento", pattern = "/searchDocumento", viewId = "/resources/pages/documento/searchDocumento.jsf")
})

我尝试使用文件上传时出现错误控制台

在处理RENDER_RESPONSE 6: UIComponent-ClientId时得到javax.faces.event.AbortProcessingException错误

08:43:55,231 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:8080-2) Error Rendering View[/resources/pages/documento/searchDocumento.xhtml]: javax.faces.event.AbortProcessingException: java.lang.NullPointerException
    at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:303) [primefaces-6.0.jar:6.0]
    at org.primefaces.context.PrimePartialResponseWriter.startUpdate(PrimePartialResponseWriter.java:142) [primefaces-6.0.jar:6.0]

Caused by: java.lang.NullPointerException
    at org.primefaces.util.ResourceUtils.filterStylesheets(ResourceUtils.java:96) [primefaces-6.0.jar:6.0]
    at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:287) [primefaces-6.0.jar:6.0]
    ... 49 more


08:43:55,246 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-/0.0.0.0:8080-2) JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de RENDER_RESPONSE 6: UIComponent-ClientId=, Message=java.lang.NullPointerException
08:43:55,240 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:8080-5) Error Rendering View[/resources/pages/documento/searchDocumento.xhtml]: javax.faces.event.AbortProcessingException: java.lang.NullPointerException

2017 年 9 月 27 日更新 我收到错误: JBWEB000281:Servlet 映射指定了一个未知的 Servlet 名称 Faces Servlet´

我的 web.xml 哪里出错了?

<servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
<filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
        <init-param>
            <param-name>thresholdSize</param-name>
            <param-value>51200</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping> 

    <filter-mapping>
        <filter-name>openEntityManager</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

【问题讨论】:

  • 从这里开始:stackoverflow.com/questions/18387993/…(这是重复的 imo)
  • 那么我发布的链接中的信息呢?
  • 我已经访问过这个链接,它没有解决我的问题,我已经尝试更改注释(如果适用),但它没有解决我的 p:fileUpload 问题。我想知道是否需要任何其他配置。我访问了 Primefaces 页面以查找更多信息,但 web.xml、bean 和 jsf 的实现似乎与 sweb 站点上显示的相匹配。
  • 我相信这是使用“Autowired”的依赖注入问题,因为这是我在互联网论坛上搜索时发现的唯一区别。我也试过 Primefaces 论坛,但如果使用“Autowired”与 primefaces 组件的故障有关,我没有得到任何回应。
  • 不管这一切,在我发布的链接中,它明确指出在一个类上同时使用@Component AND @ManagedBean错误

标签: spring jsf file-upload primefaces


【解决方案1】:

这解决了我的问题:

Listener method in p:fileUpload is never invoked in primefaces

除此之外。 我需要指定 Faces Servlet 的位置:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>

javax.faces.webapp.FacesServlet

我需要指定资源 primefaces 取决于文件上传工作正常>

<context-param>
        <param-name>primefaces.UPLOADER</param-name>
        <param-value>commons</param-value>
 </context-param>

在某些版本的 primefaces 中,不需要指定此配置。我目前使用的是6.0版本,它认为web.xml中不需要这个规范,因为它是一个较新的版本,但它是必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2018-10-04
    • 2013-11-06
    相关资源
    最近更新 更多