Еще одна проблема с загрузкой файлов PrimeFaces 3.0.M4 - PullRequest
1 голос
/ 15 ноября 2011

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

1 Ответ

1 голос
/ 16 ноября 2011

Попробуйте сначала с простым / стандартным фильтром Primefaces:

<filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

Я действительно не знаю, почему это не работает для вас.Я попробовал простой и расширенный режим, и оба работают просто отлично.Также, если вы используете расширенный режим, вы можете использовать метод действия, который получает FileUploadEvent event в качестве параметра, и это проще сделать следующим образом:

String fileName = "Uploaded_"+event.getFile().getFileName();
        System.out.println("Uploaded: " + fileName);

ОБНОВЛЕНИЕ:

Поскольку у вас есть только файл загрузкина втором этапе вы можете попробовать что-то вроде этого.

<p:wizard>
    <p:tab id="firstStep" title="First step">
      <h:form>
        <ui:include src="/faces/first.xhtml" />
      </h:form>
    </p:tab>
    <p:tab name="secondStep" title="Second step">
        <p:panel>
          <h:form multipart>
            <h:panelGrid columns="2" id="file">
                <p:fileUpload value="#{tutorialBean.thumbnail}" mode="simple" />
                <p:commandButton value="Submit" update="growl"
                    actionListener="#{tutorialBean.thumbnailUpload}" />
            </h:panelGrid>
          </h:form>
        </p:panel>
    </p:tab>
</p:wizard>
...