Итак, вопрос довольно распространенный. Я хочу загрузить файл на сервер, используя p:fileUpload
in mode="simple"
( showcase ). Есть много вопросов и ответов о проблемах с загрузкой файлов на форумах, но я не нашел исчерпывающего. Компонент загрузки файла находится в /faces/second.xhtml
:
<h:form>
<p:wizard>
<p:tab id="firstStep" title="First step">
<ui:include src="/faces/first.xhtml" />
</p:tab>
<p:tab name="secondStep" title="Second step">
<ui:include src="/faces/second.xhtml" />
</p:tab>
</p:wizard>
</h:form>
Где /faces/second.xhtml
содержит:
<p:panel>
<h:panelGrid columns="2" id="file">
<p:fileUpload value="#{tutorialBean.thumbnail}" mode="simple" />
<p:commandButton value="Submit" update="growl"
actionListener="#{tutorialBean.thumbnailUpload}" />
</h:panelGrid>
</p:panel>
Боб:
@SessionScoped
public class TutorialBean {
private UploadedFile thumbnail;
public void thumbnailUpload(){
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
"File uploaded", thumbnail.getFileName());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
// setters and getters
}
Я добавил фильтр FileUpload к web.xml
:
<!-- PrimeFaces file upload -->
<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>100000</param-value>
</init-param>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>C:\Users\name\Desktop\</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
И я добавил commons-io
(2.0.1) и commons-fileupload
(1.2.2) к моему pom.xml
. Согласно решениям, я нашел, что это должно работать, но это не так. thumbnail
равно null
во время thumbnailUpload
выполнения.
Я использую Primefaces 3.0.M4, jBoss как 7.0.2.Final
Заранее спасибо
Решено: Проблема была не в fileUpload
компоненте, а в форме на странице, которая была включена как часть главной страницы. Я добавил prependId="false"
во внутреннюю форму, и все работает нормально