【发布时间】:2013-04-26 21:22:27
【问题描述】:
我正在使用 p:fileUpload 但如果我使用 mode="simple" 则不会调用 fileUploadListener 。有什么方法可以在简单模式下使用 fileUploadListener。
<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();
}
--
如果我使用 value 属性而不是 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>
【问题讨论】:
-
@RongNK:OP 暗示使用
mode="advanced"时它可以正常工作。 @Arpit:你在嵌套表单吗? -
@BalusC 你是对的,它不适用于简单模式。不,我没有嵌套表格。我也尝试使用 ajax 来实现相同的功能,但 f:ajax 和 p:ajax 都无法执行 primeface p:fileUpload 组件。
-
ELException表示 setter 方法缺失或错误。请注意,mode="simple"不支持 ajax(并且与mode="advanced"相关的所有其他属性,例如update、sizeLimit、allowTypes和auto都被完全忽略)。因此,如果您在使用mode="simple"时一直尝试通过 ajax 上传,那么您首先就错了。另请参阅 RongNK 提到的链接。 -
@BalusC 谢谢,但我还没有解决为什么 fileUploadListener 不能在简单模式下工作。我搜索了很多也遵循了 RongNK 提供的链接中提到的步骤,但没有运气。
标签: jsf jsf-2 primefaces