2013-05-02 67 views
2

我使用的是p:fileUpload,但如果我使用mode="simple",则fileUploadListener不会被调用。有没有什么办法在简单模式下使用fileUploadListener。PrimeFaces p:fileUpload监听器方法永远不会调用mode =“simple”

<p:fileUpload id ="uploading" 
       fileUploadListener="#{workflowActionTemplate.handleFileUpload}" 
       mode="simple" 
       update="messages" 
       sizeLimit="100000" 
       allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/" 
       multiple="true"/> 

总理面临:3.2

我做了如下配置,请让我知道如果我错过什么。

的web.xml:

<!-- File Upload filter --> 
<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> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

的pom.xml:

<!-- Dependancy for file upload --> 
<dependency> 
<groupId>commons-fileupload</groupId> 
<artifactId>commons-fileupload</artifactId> 
<version>1.2</version> 
</dependency> 

<dependency> 
<groupId>org.primefaces</groupId> 
<artifactId>primefaces</artifactId> 
<version>3.2</version> 
</dependency> 

监听方法:

public void handleFileUpload(FileUploadEvent event) { 
    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); System.out.println("msg : "+ msg); 
    uploadedFile = event.getFile(); 
} 

-

如果我使用属性值fileUploadListener代替如果我不上前广告文件,然后 fileUpload属性没有得到设置,所以它给出了以下错误。

javax.faces.component.UpdateModelException: javax.el.ELException: /search/workflowAction.xhtml @181,104 value="#{workflowActionTemplate.uploadedFile}": Can't set property 'uploadedFile' of type 'org.primefaces.model.UploadedFile' on class 'com.principal.nq.statements.search.WorkflowActionTemplate$$EnhancerByCGLIB$$6ebcb7eb' to value ''

更新

由于fileUploadListener不工作我也尝试使用Ajax调用以下列方式更新文件的价值。但f:ajax无法执行Primefaces p:fileUpload组件。我也试过p:ajax,但那也行不通。

<p:fileUpload id="uploading" 
       value="#{workflowActionTemplate.uploadedFile}" 
       mode="simple" 
       update="messages" 
       sizeLimit="100000" 
       allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/" 
       auto="true"/> 
<p:growl id="messages" showDetail="true"/> 
<h:commandButton id="uploadDocument" styleClass="continuebutton" value="#{msg.upload}" action="#{workflowActionTemplate.uploadParticipantCustomDoc}"> 
    <f:ajax execute="uploading" render="uploadDocumentDlg" onevent="onAjaxUploadCustomDoc"/> 
</h:commandButton> 
+0

你的问题是重复的:http://stackoverflow.com/questions/8875818/how-t o-use-primefaces-pfileupload-listener-method-is-never-invoked – 2013-05-02 16:00:21

+2

@RongNK:OP意味着在使用'mode =“advanced”时它工作正常。 @Arpit:你是否在嵌套表单? – BalusC 2013-05-02 18:22:42

+0

@BalusC你是对的,它不适用于简单模式。不,我不是嵌套形式。我也尝试使用ajax,以便我可以实现相同的功能,但f:ajax&p:ajax都无法执行primeface p:fileUpload组件。 – Arpit 2013-05-03 07:07:41

回答

0

请按照以下步骤使您的代码完美无瑕。 XHTML文件中的 。

<p:fileUpload id="choose" validator="#{controllerClass.validateFile}" multiple="false" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" value="#{controllerclass.uploadedfile}" required="true" mode="simple"/> 

<p:commandButton ajax="false" id="saveBtn" update="errBrand,pnl" value="Save Brand" action="#{controllerClass.uploadFile()}" /> 

在web.xml中定义了以下过滤器和servlet。

<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> 
在您需要定义方法的身体像这样

使用控制器类

import org.primefaces.model.UploadedFile;

如果要定义上传文件的验证方法
private UploadedFile uploadedfile; 

,你可以把它写这样

public void validateFile(FacesContext ctx, 
      UIComponent comp, 
      Object value) { 
     List<FacesMessage> msgs = new ArrayList<FacesMessage>(); 
     UploadedFile file = (UploadedFile)value; 
     int fileByte = file.getContents().length; 
     if(fileByte > 15360){ 
      msgs.add(new FacesMessage("Too big must be at most 15KB")); 
     } 
     if (!(file.getContentType().startsWith("image"))) { 
      msgs.add(new FacesMessage("not an Image file")); 
     } 
     if (!msgs.isEmpty()) { 
      throw new ValidatorException(msgs); 
     } 
    } 
+0

感谢您的回答,但我不确定我能否对此进行测试,因为我现在不再在该领域工作。无论如何,我感谢你的帮助。 – Arpit 2015-04-12 08:13:51

相关问题