是否可以在fileupload primeface上禁用f:event type =“preRenderView”侦听器

时间:2014-06-27 06:45:21

标签: jsf jsf-2 primefaces jsf-2.2

我有一个fileUploader,在部分网站刷新后会消失

这是我的xhtml文件

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
    template="/WEB-INF/templates/traleerdf-template.xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns="http://www.w3.org/1999/xhtml">

<ui:define name="content">
    <f:metadata>
        <f:event type="preRenderView"
                 listener="#{registration.loadRegistrationDetails()}" ></f:event>
    </f:metadata>
    <p:ajaxStatus onstart="PF('statusDialog').show();" onsuccess="PF('statusDialog').hide();"/>
    <p:dialog modal="true" widgetVar="statusDialog" header="Saving"
              draggable="false" closable="false">
    <p:graphicImage value="/images/ajax-loader.gif"/>
    </p:dialog>

    <h:form id="form" enctype="multipart/form-data">
       <p:panelGrid  id="detail" columns="1" >
          <p:dataTable var="reg" id="datatable" value="#{registration.registrationDTOs}" rows="12">
             <p:column headerText="Name" style="width:5%">
                <p:outputLabel value="#{reg.sourceName}"/>
             </p:column>
             <p:column headerText="Path Prefix" style="width:5%">
                 <p:outputLabel value="#{reg.pathPrefix}"/>
              </p:column>
              <p:column headerText="Template File" style="width:30%">
                  <p:commandButton id="templateButton" value="Get Template" oncomplete="tempDlg.show();" process="@this" title="Template File"
                    update=":topForm:form:growl :topForm:form:tempId">
                    <f:setPropertyActionListener value="#{reg}" target="#{registration.registrationDTO}" />
                  </p:commandButton>
               </p:column>
               <p:column style="width:2%" headerText="Update">
                   <p:commandButton id="selectButton" update=":topForm:form:growl :topForm:form:display"  process="@this" oncomplete="regDialog.show()" icon="ui-icon-search" title="Edit">
                   <f:setPropertyActionListener value="#{reg}" target="#{registration.registrationDTO}" />
                   </p:commandButton>
                </p:column>
           </p:dataTable>
           <p:dialog header="Registration Detail" widgetVar="regDialog" resizable="false" id="regDlg" showEffect="fade" hideEffect="explode" modal="true">
               <p:panelGrid id="display" columns="2" style="margin:0 auto;" >
                  <p:outputLabel id="lblEndpoint" for="txtEndpoint" value="#{msg['Registration.Endpoint']}"/>
                  <h:outputText id="txtEndpoint" value="#{registration.registrationDTO.endpoint}"/>
                   <p:outputLabel id="lblSourceName" for="txtSourceName" value="#{msg['Registration.sourceName']}"/>
                    <p:inputText  required="true"  id="txtSourceName" value="#{registration.registrationDTO.sourceName}" requiredMessage="Source name not entered"/>
                     <p:outputLabel  id="lblPathPrefix" for="txtPathPrefix" value="#{msg['Registration.pathPrefix']}"/>
                     <p:inputText  disabled="true" required="true" id="txtPathPrefix" size="20" value="#{registration.registrationDTO.pathPrefix}" requiredMessage="Path prefix is required"/>
                     <p:outputLabel id="lblTemplateFile" for="txtTemplateFile" value="#{msg['Registration.templateFile']}"/>
                    <p:fileUpload required="true" id="txtTemplateFile" fileUploadListener="#{registration.uploadTemplateFile}"  requiredMessage="Template File required"
                    mode="advanced" widgetVar="txtTemplateFile" value="#{registration.registrationDTO.templateFile}" update=":topForm:form:growl">                                              
                        </p:fileUpload>
                    <h:panelGroup>
                      <p:commandButton icon="ui-icon-disk" id="btnUpdte" update=":topForm:form:growl :topForm:form:panel" ajax="true" action="#{registration.updateRegistration()}" style="margin-right:20px;"
                                             value="Update" >
                      </p:commandButton>
                    </h:panelGroup>
                </p:panelGrid>
            </p:dialog>
             <p:dialog header="Template Dialog" widgetVar="tempDlg" modal="true" height="100" showEffect="fade" hideEffect="explode">
                <p:panelGrid id="tempId" style="margin:0 auto;" columns="2">
                   <p:outputLabel id="TemplateFileLbl" for="TemplateFile" value="#{msg['Registration.templateFile']}"/>
                     <h:outputText value="#{registration.registrationDTO.templateFile}" id="TemplateFile"/>
                </p:panelGrid>
              </p:dialog>
          </p:panelGrid>
       </p:panel>
    </h:form>
   </ui:define>
 </ui:composition>

上传按钮将打开一个新对话框,允许用户编辑字段并上传新模板文件。

我的问题是每次单击对话框中的上传按钮时,f:调用事件方法方法,因为它是prerender类型,但无论如何都要避免对fileupload的此事件调用,因为它覆盖了我上传的模板文件名。 (prerender方法调用db来获取详细信息列表,在这种情况下覆盖模板文件。)

1 个答案:

答案 0 :(得分:0)

从您使用的命名空间中,我假设您使用的是JSF 2.2。在这个版本中,您可以拥有

<f:viewAction action="#{registration.loadRegistrationDetails()}"/>

默认情况下,不会在回发时执行viewAction标记。