Не удалось загрузить файл с фильтром PrettyFaces

Когда я добавляю коды фильтров в свой 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, я смогу загрузить файл и отправить форму, в противном случае я получаю вышеупомянутое исключение.

Я использую :

  • симпатичные лица-jsf2-3.3.3.jar
  • переписать-сервлет-2.0.12.Final.jar
  • JSF 2.2

ОБНОВЛЕНИЕ:

После стольких исследований я нашел проблему.

Моя структура проекта выглядит следующим образом:

 parentProject
 |
 |---childProject

Где parentProject — проект EAR, а childProject — веб-проект.

Когда я добавляю JAR,

  • переписать-сервлет-2.0.12.Final.jar
  • переписать-config-prettyfaces-2.0.12.Final.jar

до childProject/Web-INf/lib работает нормально.

Но требование состоит в том, чтобы добавить банки в parentProject/EarContent/lib, когда я добавляю банки в это место, отображение красивых лиц не работает.

Я не мог найти никакого решения.


person Sujith PS    schedule 23.04.2015    source источник
comment
Я использую: prettyfaces-jsf2-3.3.3.jar + rewrite-servlet-2.0.12.Final.jar + jsf2.2   -  person Sujith PS    schedule 23.04.2015
comment
Должен ли я использовать: rewrite-config-servlet-2.0.12.Final.jar и rewrite-impl-servlet-2.0.12.Final.jar?   -  person Sujith PS    schedule 24.04.2015
comment
Да, вам следует использовать только артефакты rewrite 2.0.12.Final, включая rewrite-config-prettyfaces-2.0.12.Final, как описано на веб-сайте prettyfaces: ocpsoft.org/prettyfaces   -  person Lincoln    schedule 24.04.2015


Ответы (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

Это должно работать нормально. :)

person chkal    schedule 24.04.2015
comment
А как насчет записи в web.xml для фильтра? - person Sujith PS; 24.04.2015
comment
Вам не нужно ничего добавлять, если вы используете контейнер, совместимый с Servlet 3.x. См.: ocpsoft.org/rewrite/docs/configuration/install. - person chkal; 24.04.2015
comment
Когда я использую rewrite-servlet-2.0.12.Final.jar rewrite-config-prettyfaces-2.0.12.Final.jar rewrite-integration-faces-2.0.12.Final.jar , я даже не смог сопоставить какой-либо URL-адрес, для все URL-адреса я получаю 404. Я думаю, что pretty-config.xml не подбирает - person Sujith PS; 24.04.2015