如何在没有任何onclick事件发生的情况下从VisualForce页面调用控制器方法? 我的VisualForce页面就像
<apex:page standardController="Account">
<script>
/* Here i need to call a controller class with out any onclick event. It should load by itselef */
</script>
</apex:page>
我的控制器类就像
public class OrderPadController {
/* this will be the constructor */
public PageReference openPage() {
PageReference newpage = new Pagereference('/apex'+'/pagetoopen'+'?aid='+a.id);
openorderpadembed.setRedirect(false);
return openorderpadembed;
}
在我的VisualForce页面中,我需要调用方法openPage()
。
请帮帮我
答案 0 :(得分:4)
您可以通过以下方式使用JavaScript Remoting for Apex Controllers:
<apex:page standardController="Account" extensions="OrderPadController">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
window.$j = jQuery.noConflict();
$j( document ).ready(function() {
OrderPadController.openPage(function(result, event){
console.log(result);
window.open(result,"_self");
});
});
</script>
</apex:page>
public class OrderPadController {
//
@remoteAction
public PageReference openPage() {
PageReference newpage = NEW Pagereference('/apex' + '/pagetoopen' + '?aid=' + a.id);
openorderpadembed.setRedirect(false);
return openorderpadembed;
}
}
答案 1 :(得分:1)
<apex:page standardController="Account" extensions="OrderPadController"
action="{!openPage}">
</apex:page>
action参数会在页面加载后立即调用您想要的方法。这是一个危险的属性,如果您要通过Salesforce的安全审核流程,将会向您指出。被调用的动作可以操纵数据库值(例如,OrderPadController构造函数不能),并且哲学是访问页面的行为不应该有任何副作用。
在您的特定情况下,即使没有任何Apex代码,您也可以这样做:
<apex:page standardController="Account"
action="/apex/Gantt?aid={!$CurrentPage.parameters.id}">
Look Mom, no hands!
</apex:page>
正如帕维尔所提到的 - 请详细说明您的要求。我怀疑你甚至不需要这个visualforce页面作为重定向,一个简单的自定义链接或按钮(type = url而不是Visualforce或Javascript)可以做到这一点......