如何从页面控制器模拟按钮单击?

时间:2012-04-26 16:22:08

标签: salesforce apex-code visualforce

我正在使用Visualforce创建类似Google的应用程序,用户输入搜索字词,点击搜索,结果显示在搜索框下方。作为其中一部分,当用户单击“搜索”时,将设置actionStatus以在搜索过程中显示“正在加载...”:

<apex:commandButton value="Search" action="{!runQuery}" status="loading"/>

现在我正在尝试设置登录页面,该页面只是一个带有输入字段和搜索按钮的页面,用于初始搜索。在Google风格中,第一次搜索会将用户带到显示结果的页面,搜索框会移到顶部。

问题是我不知道如何在页面加载时调用actionStatus。当用户点击按钮时很容易,但是当从登录页面搜索时,会加载新页面并然后执行搜索。目前我只是让控制器的构造函数检查参数,如果找到任何参数,则手动调用runQuery(),但这只会延迟页面加载时间而不会调用actionStatus。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用

<apex:actionFunction name="runQueryJS" action="{!runQuery}" status="loading" />

创建一个客户端调用点,然后在body的加载事件(或者你想要运行查询的其他地方)附加一个处理程序,它将调用runQueryJS() javascript函数,该函数将执行Ajax调用以进行搜索

答案 1 :(得分:1)

添加onLoad事件调用不起作用,但将其放在页面的最后,就在结束apex:page标记之前。我不完全确定为什么,但它很干净并完成工作。

<script>
    runQuery();
</script>