Конфликт между использованием компонента hx:fileupload и tomahawk tree2 в приложении

Я использую компонент hx:fileupload, который позволяет пользователю открывать локальную файловую систему и переходить к файлу. В том же приложении я использовал компонент tomahawk tree2 для отображения иерархической структуры каталогов.

Раньше для добавления компонента tree2 загрузка файла работала отлично, но когда я добавил тег фильтра, соответствующий tomahawk tree2, в файл web.xml, getFileupload1().getFilename() метод компонента hx:fileupload (где getFileupload1() — метод получения компонента hx:fileupload) возвращает нулевое исключение.

Код тега фильтра:

<filter>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
</filter-mapping>

Если я удалю тег фильтра из файла web.xml, компонент fileupload возобновит работу, но компонент Tree2 не будет работать.

Помогите, пожалуйста, заставить оба компонента работать вместе в приложении.

Спасибо

Я сделал следующие обновления:

  1. Реализован сервлет фильтра ExtensionsFilter путем удаления блока if (ServletFileUpload.isMultipartContent(httpRequest)) {} из исходного файла исходного кода ExtensionsFilter.

обновлен код web.xml

<filter>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <filter-class>pagecode.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
</filter-mapping>

Пожалуйста помоги. Спасибо.


person nagesh    schedule 03.12.2013    source источник


Ответы (1)


ExtensionsFilter также автоматически анализирует multipart/form-data запросов как часть своей работы для Tomahawk <t:inputFileUpload>. Это не отключается конфигурацией.

У вас есть в основном 2 варианта:

  1. Скопируйте исходный код ExtensionsFilter под той же лицензией и удалить весь блок if (ServletFileUpload.isMultipartContent(httpRequest)) {} (строки 347-350), чтобы он больше не анализировал запросы multipart/form-data и вместо этого использовал этот фильтр .

  2. Замените <hx:fileUpload> на <t:inputFileUpload>.

person BalusC    schedule 03.12.2013
comment
Я использовал первый подход, он заставляет hx:fileupload работать правильно, но вызов страницы с компонентом tree2 выдает java.lang.IllegalStateException: ExtensionsFilter настроен неправильно. Отсутствует сопоставление ресурсов. Ресурсы не могут быть доставлены. См.: myfaces.apache.org/tomahawk/extensionsFilter.html - person nagesh; 04.12.2013
comment
Вам нужно добавить сопоставление фильтров для ресурсов, как например, в данной ссылке. - person BalusC; 04.12.2013
comment
Пожалуйста, проверьте обновленный вопрос. Форматирование кода не работает. Пожалуйста, уточните, на какую ссылку я должен ссылаться для сопоставления ресурсов. Спасибо. - person nagesh; 04.12.2013
comment
Черт возьми, на основе исходного кода Tomahawk он вручную анализирует web.xml и явно проверяет, находит ли он фильтр с классом FQN org.apache.myfaces.webapp.filter.ExtensionsFilter, и выдает эту ошибку при его отсутствии: | Вам придется переименовать свой фильтр, чтобы он имел точно такое же имя пакета и класса (и сохранить его в своем проекте веб-приложения, чтобы он заканчивался на /WEB-INF/classes и, таким образом, имел приоритет при загрузке классов по сравнению с классом в любом JAR, поэтому не помещайте это в банке). - person BalusC; 04.12.2013
comment
Получил решение, и мое приложение теперь запущено и работает. Обязан. :) - person nagesh; 04.12.2013