【问题标题】:why when I´m using fileupload in primefaces I can do ajax call?为什么当我在 primefaces 中使用 fileupload 时,我可以进行 ajax 调用?
【发布时间】:2014-12-06 05:26:53
【问题描述】:

我有一个显示在对话框中的上传器。因此,当我成功上传文件时;我希望我的拨号关闭,如果上传后出现错误,我不想关闭我的对话框。所以我的上传工作但是当它关​​闭我的对话框时,我从firebur收到消息:ReferenceError:args未定义。 这是我的对话框的代码:

<p:dialog maximizable="true" 
          minHeight="400" 
          minWidth="400" 
          id="dialogCarga" 
          header="Cargar gestores" 
          widgetVar="gestorCargarDialog" 
          resizable="false"
          modal="true">
    <p:ajax event="close" 
            listener="#{gestorMB.handleClose}" 
            update="agregarGestor"/>
    <h:form id="cargarGestor">
        <p:growl id="growl2" 
                 showDetail="false" />
        <table>
            <tr>
                <td align="left">
            <h:outputText id="layoutUpd" 
                          value="Subir archivo:" />
            </td>                                               
            <td align="left">
            <p:fileUpload invalidSizeMessage="El archivo tiene un tama&ntilde;o superior al v&aacute;lido" 
                          label="Escoger" cancelLabel="Cancelar" 
                          uploadLabel="Cargar archivo" 
                          fileUploadListener="#{gestorMB.handleFileUpload}"
                          id="SigUPD" 
                          oncomplete="handleCargarGestRequest(args)" 
                          invalidFileMessage="Tipo de archivo inv&aacute;lido, solo se aceptan archivos con extensi&oacute;n csv." process="@this"
                          allowTypes="/(\.|\/)(csv)$/" sizeLimit="20971520" 
                          update=":gestorForm:, erroresCarga, growl2, SigUPD" 
                          fileLimit="1" 
                          fileLimitMessage="Favor de cargar un archivo a la vez.">                                    
            </p:fileUpload>
            </td>                                                  
            </tr> 
            <tr>
                <td align="left">
            <p:outputPanel id="layoutGestores">
                <a href="#{gestorMB.layoutLinkGestores}" 
                   target="_blank">Descargar formato de carga de gestores.</a> 
            </p:outputPanel>
            * Nota: Todos los campos del archivo son obligatorios menos la extensi&oacute;n.
            El archivo debe estar libre de errores para poder cargar los gestores.
            </td>                              
            </tr>
        </table>
        <p:dataTable id="erroresCarga" 
                     value="#{gestorMB.msgError}" 
                     var="element" 
                     paginator="true" 
                     rows="10" 
                     emptyMessage="No existen errores"
                     paginatorTemplate="{CurrentPageReport} 
                                        {FirstPageLink} 
                                        {PreviousPageLink} 
                                        {PageLinks} 
                                        {NextPageLink} 
                                        {LastPageLink} 
                                        {RowsPerPageDropdown}"  
                     rowsPerPageTemplate="10,20,40" >
            <f:facet name="header">
                Errores en el archivo #{gestorMB.nombreArchivo}
            </f:facet>      
            <p:column headerText="Error">
                #{element}
            </p:column>                                                    
        </p:dataTable>                       
    </h:form>
</p:dialog>

这是我使用 fileupload 方法关闭对话框的代码: RequestContext.getCurrentInstance().addCallbackParam(Constantes.EXITO2, Constantes.TRUE);

最后这是我关闭对话框的 js:

function handleCargarGestRequest(args) {
    alert("handleCargarGestRequest: " + args.exito);
    if (args.exito) {
        gestorCargarDialog.hide();
    } else {
        gestorCargarDialog.show();
    }
}

我已经尝试使用 handleCargarGestRequest(xhr, status, args),但它不起作用。我知道 xhr 没有定义。 有谁知道为什么我可以在完成上传后关闭对话框? 提前致谢。

【问题讨论】:

    标签: javascript jquery ajax jsf-2 primefaces


    【解决方案1】:

    认为你可以做到(使用 PF 4 和更新的语法)

    oncomplete="if(args &amp;&amp; !args.validationFailed) {PF('gestorCargarDialog').hide();}"
    

    在 bean 上(以防出错)

    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Errormessage..."));
    FacesContext.getCurrentInstance().validationFailed();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多