Salesforce - 使用reRender

时间:2017-11-23 00:59:43

标签: salesforce visualforce commandbutton rerender

我有一个用于创建案例的VisualForce,这个VisualForce将嵌入到一个站点上,所以它是基于HTML构建的VisualForce,而在HTML内部我放了以下内容:

<apex:page applyHtmlTag="false" showHeader="false" sidebar="false" docType="" Controller="MyController">
<html>
    <body>
        <!--
            HTML PAGE
        -->
        <div id="FileUpload" class="row">
            <apex:form enctype="multipart/form-data" id="FileUploadForm">
                <apex:pageMessages id="TheMessage" />
                <apex:pageBlock>
                    <apex:pageBlockSection showHeader="false" columns="2" id="block1">
                        <apex:pageBlockSectionItem >
                            <apex:outputLabel value="File" for="file"/>
                            <apex:inputFile value="{!document.body}" filename="{!strFileName}" id="file"/>
                        </apex:pageBlockSectionItem>
                        <apex:commandButton action="{!cargarArchivo}" value="Cargar Archivo" reRender="TheMessage"/>
                    </apex:pageBlockSection>
                </apex:pageBlock>
            </apex:form>
        </div>
    </body>
</html>
</apex:page>

控制器是:

public String strFileName {get; set;}

public Document document {
    get {
        if (document == null)
            document = new Document();
        return document;
    }
    set;
}

public void cargarArchivo() {
    document.AuthorId = UserInfo.getUserId();
    document.FolderId = '00l29000000L2uH';
    document.name = strFileName;
    document.description = strFileName;
    document.keywords = strFileName;

    try {
        insert document;
    } catch (Exception e) {
        ApexPages.addMessage(new ApexPages.message(ApexPages.severity.ERROR,'Error cargando el archivo, por favor intente nuevamente'));
        return;
    } finally {
        document.body = null; // clears the viewstate
        document = new Document();
    }

    ApexPages.addMessage(new ApexPages.message(ApexPages.severity.INFO,'Archivo cargado con éxito.'));
}

到目前为止,一切都运行良好,但是当你将reRender添加到commandButton时,就像这样:

<apex:commandButton action="{!cargarArchivo}" value="Cargar Archivo" reRender="TheMessage"/>

我收到以下错误:

3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript:178 
    Uncaught TypeError: actionUrl.indexOf is not a function
        at A4J.Query.getActionUrl (3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript:178)
        at A4J.AJAX.XMLHttpRequest.send (3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript:67)
        at Object.A4J.AJAX.SubmitQuery (3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript:125)
        at Object.A4J.AJAX.Submit (3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript:126)
        at HTMLInputElement.onclick (RF2_CrearCasoWeb_pag?negocio=WEB_GIE:559)

1 个答案:

答案 0 :(得分:0)

您可以使用重新渲染,也可以使用inputfile标记。它们不能一起使用,因为错误说明了。

您的页面消息会在没有提及的情况下自动重新呈现。所以你不用担心。

作为最佳做法,您可以使用iframe标记,该标记将独立的HTML文档嵌入到当前文档中。