Как я могу имитировать нажатие кнопки с контроллера страницы?

Я создаю приложение, похожее на Google, в Visualforce, где пользователь вводит поисковый запрос, нажимает кнопку «Поиск», и результаты отображаются под полем поиска. В рамках этого, когда пользователь нажимает кнопку «Поиск», в actionStatus устанавливается отображение «Загрузка ...» во время выполнения поиска:

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

Теперь я пытаюсь настроить целевую страницу, которая представляет собой просто страницу с полем ввода и кнопкой поиска, для первоначального поиска. В стиле Google при первом поиске пользователь попадает на страницу, где отображаются результаты, а поле поиска перемещается вверх.

Проблема в том, что я не знаю, как вызвать actionStatus при загрузке страницы. Это достаточно просто, когда пользователь нажимает кнопку, но при поиске с целевой страницы загружается новая страница и затем выполняется поиск. На данный момент у меня просто конструктор контроллера проверяет параметры и, если они есть, вызываю runQuery() вручную, но это просто задерживает время загрузки страницы и не вызывает actionStatus.

Любые идеи?


person damien    schedule 26.04.2012    source источник


Ответы (2)


Использовать

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

чтобы создать точку вызова на стороне клиента, затем прикрепите обработчик к загруженному событию тела (или где-либо еще, из которого вы хотите запустить запрос), который вызовет функцию javascript runQueryJS(), которая будет выполнять вызов Ajax для поиска.

person mmix    schedule 26.04.2012

Добавление вызова события onLoad не сработало, но, по-видимому, размещение его в самом конце страницы, непосредственно перед закрывающим тегом apex:page. Я не совсем уверен, почему, но он чистый и выполняет свою работу.

<script>
    runQuery();
</script>
person damien    schedule 30.04.2012