【问题标题】:apex:actionFunction and Database.Update() unintended page refreshapex:actionFunction 和 Database.Update() 意外页面刷新
【发布时间】:2012-08-10 00:29:52
【问题描述】:

因此,我一直在为 visualforce 页面开发“编辑项目”模式,该模式将允许用户编辑对象的子组件并刷新页面。就目前而言,有一个包含父对象 ID 的 URL 参数。代码的结构与此非常相似:

<apex:form id="edit-modal">
     <!-- Modal Content-->
     <apex:actionFunction action="{!updateModalObject}" name="updateModalObject">

     </apex:actionFunction> 
</apex:form>

当用户在模态中按下“保存”按钮时,会调用上述动作函数。控制器中的类如下所示:

public PageReference updateModalObject(){        
    database.update(modalObject); 

    return null;
}

当此操作完成时,页面正在刷新,同时删除了 URL 参数并导致整个事情有点.. 搞砸了。我不确定代码的哪一部分导致了刷新,是动作函数还是控制器中的更新。

【问题讨论】:

    标签: ajax salesforce apex-code visualforce


    【解决方案1】:

    你说:

    当用户按下“保存”按钮时...

    我认为这是导致页面刷新的原因。您是否使用没有 reRender 标签的命令按钮?解决方案可能如下所示:

    试试这个技巧 - 在执行 JavaScript 函数后添加 return false:

    <apex:commandButton value="Save" onclick="updateModalObject(); return false;"/>
    

    避免页面重新加载的其他方法是添加一个虚拟的 reRender 标记:

    <apex:commandButton value="Save" onclick="updateModalObject()" reRender="none" />
    

    <apex:actionFunction action="{!updateModalObject}" name="updateModalObject"  reRender="none">
    

    您必须重新渲染“某些东西”以避免页面重新加载。否则命令按钮将重新加载整个页面。在我们的例子中,我们将重新渲染“nothing”。

    【讨论】:

    • 这是第三个,我使用自定义 jQuery 按钮来调用操作,但实际上是一个命令按钮,所以我没有澄清这一点是我的错误。有 rerender="nothing" 是解决方案。谢谢!
    • 我最近遇到了这个问题,需要在我的&lt;button&gt; 标签中的onclick 中添加一个; return false;。我以为刷新是由 Salesforce 引起的,但肯定是浏览器本身在进行刷新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多