使用<p:fileUpload>和<h:inputText>在上传时不会获得inputext映射值

Mut*_*thu 3 primefaces jsf-2

我使用PrimeFaces <p:fileUpload ><h:inputText>里面.我面临的问题是当我上传图像并添加图像的标题时,图像被上传但是inputText值将包含null,不会映射到bean.

图片上传的Jsf页面:

     <p:fileUpload id="imaload" fileUploadListener="#{ngoPhotoUpload.photoUpload}"  
                         mode="advanced"  multiple="true" 
                          update="messages" 
                           allowTypes="/(\.|\/)(gif|jpe?g|png)$/">
     <h:inputText value="#{ngoPhotoBean.description}"/>
     </p:fileUpload>
Run Code Online (Sandbox Code Playgroud)

当我上传ngoPhotoBean.description包含null.我正在使用primefaces 3.0和jsf 2.0.我该如何解决?

Ada*_*dam 9

使用fileUploadprocess属性,并将FileUploadEvent推送到INVOKE_APPLICATION阶段,以查看inputText值#{ngoPhotoBean.description}:

XHTML:

<h:form>
    <p:fileUpload fileUploadListener="#{ngoPhotoUpload.photoUpload}" process="@form" update="@form" />
    <h:inputText value="#{ngoPhotoBean.description}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

Java的:

public void photoUpload(FileUploadEvent event) {
    if (!PhaseId.INVOKE_APPLICATION.equals(event.getPhaseId())) {
        event.setPhaseId(PhaseId.INVOKE_APPLICATION);
        event.queue();
    } else {
        //do stuff here, #{ngoPhotoBean.description} is set
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然我意识到这是一个旧线程,但我认为我会澄清在正常情况下,文件上传监听器在"应用请求值"期间执行.但是,在"更新模型值"之前,您在process属性中指定的任何内容都不可用.因此,通过将事件的阶段设置为INVOKE_APPLICATION,您将推迟执行,直到该阶段完成并且您的值可用. (2认同)