【问题标题】:Could not upload file with PrettyFaces filter无法使用 PrettyFaces 过滤器上传文件
【发布时间】:2015-07-01 17:29:20
【问题描述】:

当我在 web.xml 中添加过滤器代码时

<filter>
    <filter-name>Pretty Filter</filter-name>
    <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

<filter-mapping>
    <filter-name>Pretty Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ASYNC</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

我无法上传文件并出现异常:

javax.servlet.ServletException: 0
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
........
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at com.ocpsoft.pretty.faces.servlet.PrettyFacesWrappedRequest.getParameter(PrettyFacesWrappedRequest.java:55) [prettyfaces-jsf2-3.3.3.jar:]
    at com.sun.faces.context.RequestParameterMap.containsKey(RequestParameterMap.java:147) [jsf-impl-2.2.8-jbossorg-1.jar:]
......

JSF 代码:

<h:form enctype="multipart/form-data" id="myForm">
    <h:inputFile id="file"
                 label="file"
                 value="#{myBean.uploadedFile}"
                 required="true"
                 requiredMessage="File not selected !!">
    </h:inputFile>
    <h:message style="color: red" for="file" /><br />

    <h:commandButton id="submit"
                     action="#{myBean.process}"
                     value="upload file">

        <f:param name="product" value="#{param.product}"></f:param>
    </h:commandButton>
    <br />
</h:form>

如果我从 web.xml 中删除过滤器代码,我可以上传文件并提交表单,否则我会收到上述异常。

我正在使用:

  • prettyfaces-jsf2-3.3.3.jar
  • rewrite-servlet-2.0.12.Final.jar
  • JSF 2.2

更新:

经过这么多研究,我发现了问题。

我的项目结构是这样的:

 parentProject
 |
 |---childProject

其中 parentProject 是 EAR 项目,childProject 是 Web 项目。

当我添加 JAR 时,

  • rewrite-servlet-2.0.12.Final.jar
  • rewrite-config-prettyfaces-2.0.12.Final.jar

childProject/Web-INf/lib,它工作正常。

但要求是将 jars 添加到 parentProject/EarContent/lib ,当我将 jars 添加到此位置时,prettyfaces 映射不起作用。

我找不到任何解决方案。

【问题讨论】:

  • 我正在使用:prettyfaces-jsf2-3.3.3.jar + rewrite-servlet-2.0.12.Final.jar + jsf2.2
  • 我应该使用:rewrite-config-servlet-2.0.12.Final.jar 和 rewrite-impl-servlet-2.0.12.Final.jar 吗?
  • 是的,您应该只使用 rewrite 2.0.12.Final 工件,包括 prettyfaces 网站上记录的 rewrite-config-prettyfaces-2.0.12.Final:ocpsoft.org/prettyfaces

标签: jsf gradle ear wildfly-8 prettyfaces


【解决方案1】:

您在不兼容的版本中混合 PrettyFaces 和 Rewrite。您应该使用以下依赖项:

rewrite-servlet-2.0.12.Final.jar
rewrite-config-prettyfaces-2.0.12.Final.jar
rewrite-integration-faces-2.0.12.Final.jar

这应该可以正常工作。 :)

【讨论】:

  • 那么过滤器的 web.xml 条目呢?
  • 如果您使用的是与 Servlet 3.x 兼容的容器,则无需添加任何内容。见:ocpsoft.org/rewrite/docs/configuration/install
  • 当我使用 rewrite-servlet-2.0.12.Final.jar rewrite-config-prettyfaces-2.0.12.Final.jar rewrite-integration-faces-2.0.12.Final.jar 时,我甚至无法映射任何 URL,因为我得到 404 的所有 url。我觉得 pretty-config.xml 没有收到
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2012-10-15
  • 2012-12-16
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多