Ошибка загрузки файла JSF - PullRequest
0 голосов
/ 13 марта 2012

Я сделал эту часть формы

<td>
   <h:form enctype="multipart/form-data">  
      <p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload(event)}"  
                    mode="advanced"  
                    update="messages"   
                    multiple="true"  
                    sizeLimit="2000000"   
                    allowTypes="/(\.|\/)(pdf|doc?x|xls?x)$/"/>  
       <p:growl id="messages" showDetail="true"/>  
    </h:form>
</td> 

и этот обработчик событий в классе:

    public class UploadBean {

    /** Creates a new instance of UploadBean */
    public UploadBean() {
    }
    private static final int BUFFER_SIZE = 6124;
    public void handleFileUpload(FileUploadEvent event) {

    ExternalContext extContext = FacesContext.getCurrentInstance().
                                 getExternalContext();
    File result = new File(extContext.getRealPath
     ("//WEB-INF//upload") + "//" + event.getFile().getFileName());

try {
    FileOutputStream fileOutputStream = new FileOutputStream(result);

    byte[] buffer = new byte[BUFFER_SIZE];

    int bulk;
    InputStream inputStream = event.getFile().getInputstream();
    while (true) {
      bulk = inputStream.read(buffer);
      if (bulk < 0) {
             break;
             }
      fileOutputStream.write(buffer, 0, bulk);
      fileOutputStream.flush();
      }

      fileOutputStream.close();
      inputStream.close();

      FacesMessage msg = new FacesMessage("Succesful", 
          event.getFile().getFileName() + " is uploaded.");
      FacesContext.getCurrentInstance().addMessage(null, msg);

      } catch (IOException e) {

      FacesMessage error = new FacesMessage("The files were not uploaded!");
      FacesContext.getCurrentInstance().addMessage(null, error);
      }
    }
}

Теперь методом обработки я получил его с сайта. Я не уверен, почему это не удается загрузить. это выглядит хорошо для меня. Может быть, что-то упустил? Таким образом, элемент управления появляется на моей странице, и я могу выбрать файл, но затем индикатор загрузки загружается просто быстро ... никаких уведомлений рычания не отображается, а также, конечно, файл не загружен. Спасибо,

1 Ответ

3 голосов
/ 13 марта 2012

Из документов (при условии использования Primefaces)
Первое, что нужно сделать, это настроить фильтр загрузки файлов, который анализирует многочастный запрос. Фильтр FileUpload должен соответствовать сервлету Faces.

    <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>

Надеюсь, вы не пропустите этот параметр.

Также не уверен, что событие в вашем коде

<p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload(event)}" .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...