Прежде всего, я должен сказать, что я прочитал все (по крайней мере, много :)) вопросов здесь и на форумах Primefaces о проблемах с файловыми загрузчиками.
Моя конфигурация:
Праймфейс 4
JSF 2.2
Весна
Apache Tomcat 7
Мейвен
Я конвертирую проект Richfaces в Primefaces, и я застрял с компонентом fileUpload, который не вызывает метод обработчика.
Я пробовал (хотя знаю, что с Primefaces 4 в этом нет необходимости) ставить фильтры в web.xml. Я также пробовал без фильтров. Среди прочего у меня есть пружинные фильтры безопасности и языковой фильтр, но PF был первым. Я также попытался установить диспетчер на FORWARD.
У меня есть все нужные зависимости в Maven (commons - знаю, что с 4 версии не требуется, но тем не менее пробовал)
Часть xhtml:
<h:form enctype="multipart/form-data">
... /* not relevant code here */ ...
<p:graphicImage value="#{systemParamsController.image}"
id="logo" />
<p:fileUpload
fileUploadListener="#{systemParamsController.listener}"
fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
uploadLabel="#{msg['button.upload.jpg']}"
cancelLabel="#{msg['button.cancel']}"
invalidFileMessage="alert('#{msg['upload.invalidtype']}');"
update="logo" mode="advanced">
</p:fileUpload>
<p:growl id="messages" showDetail="true" />
</h:panelGrid>
</h:panelGroup>
<p:commandButton value="#{msg['button.save']}" onclick="this.disabled=true" oncomplete="this.disabled=false"
action="#{systemParamsController.save}" styleClass="qs-button"
ajax="false" />
</h:panelGrid>
</p:panel>
</center>
</h:form>
Поддерживающий компонент:
public synchronized void listener(FileUploadEvent event) throws Exception {
logger.debug("uploadListener!");
UploadedFile item = event.getFile();
getModel().getCustomer().setLogo(imageResizer.doResize(item.getContents(), 30, Side.HEIGHT));
}
Если я нажму «Выбрать», я могу выбрать файл, но после этого ничего не происходит. Обработчик не вызывается, т. к. сообщения в логе нет, кнопка загрузки файла неактивна. Я использовал этот компонент раньше для более сложных задач без проблем, поэтому я уверен, что упускаю что-то очевидное.
Заранее спасибо за любую помощь!