2013-04-18 2 views
1

Возможно ли выполнить обработку на стороне сервера до загрузки файла в PrimeFaces 3.5? Скажем, форма содержит некоторые элементы p:inputText, которые необходимо заполнить перед загрузкой файла. Так, как я могу проверить это? Любое событие?Перед загрузкой в ​​PrimeFaces 3.5

Посмотреть выглядит как-

<h:form enctype="multipart/form-data"> 
    <p:inputText value="#{fileUploadController.name}" id="name" label="Name" /> 
    <p:inputText value="#{fileUploadController.about}" id="about" label="About" /> 
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
      mode="advanced" 
      update="messages" 
      sizeLimit="100000" 
      allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 

    <p:growl id="messages" showDetail="true"/> 

</h:form> 

ManagedBean является ценам ниже

import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 

import org.primefaces.event.FileUploadEvent; 
import org.primefaces.model.UploadedFile; 

public class FileUploadController { 

    private String name; 
    private String about; 
    //Getters & Setters 

    public void beforeUpload(){ 
    if(getName().isEmpty()||getAbout().isEmpty()) 
     FacesMessage msg = new FacesMessage("Error", "Name or About cannot be empty"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 
+1

Я считаю, что вы ищете решения в заблуждении направление. Это не намерение 'handleFileUpload' обрабатывать форму submit. Он просто намерен вспомнить загруженные ранее файлы. Я бы предпочел добавить кнопку «Сохранить», которая выполняет деловую работу. – BalusC

+0

@BalusC: Отличная идея. Я могу изменить логику согласно вашему предложению. Благодарю. –

ответ

3

<p:fileUpload/> имеет onStart свойство, которое вы можете удобно провод с <p:remoteCommand/> компонентом к огню операции подложки боба перед операцией загрузки начинается

 <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
     mode="advanced" 
     onstart="startSomething();" 
     update="messages" 
     sizeLimit="100000" 
     allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 

     <p:remoteCommand name="startSomething" action="#{bean.startSomething}"/> 
+0

Звучит круто ... Мне нужно посмотреть 'p: remoteCommand' Спасибо –

+0

Добро пожаловать @RaviJoshi – kolossus

1

У меня была похожая ситуация с текстовым полем и загрузки файлов. Я не мог найти другого способа сделать это, кроме как проверить значение имени в handleFileUpload.

public void handleFileUpload(FileUploadEvent event){ 
    HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();` 
    name =req .getRequestParams("formId:name") 
    if(name==null){ 
    FacesMessage msg = new FacesMessage("Error", "Name or About cannot be empty") 
    return; 
    } 
} 
Смежные вопросы