Вызов JSF ManageBean после PageLoad с использованием f: событие postAddToView - PullRequest
3 голосов
/ 18 августа 2010

Я пишу приложение, используя JSF 2.0.

Для одной из страниц есть раздел страницы, отображение которого занимает много времени.

Чтобы улучшить взаимодействие с пользователем, я думаю сначала загрузить страницу, а затем автоматически выполнить обратный вызов Ajax объекту управления компонентом JSF после успешной загрузки страницы после первой загрузки.

Я думаю использовать f: событие с типом postAddView.

<h:outputText id="dummyId">
    <f:event type="postAddToView" listener="#{mngBean.doSomething}" />
</h:outputText>

Однако похоже, что f: событие postAddToView все еще обрабатывается до того, как страница отображается в первый раз.

Другие варианты, которые я изучаю, - это создать скрытую кнопку и получить JavaScript для ее запуска. Это работает, однако мне просто интересно, есть ли хороший компонент / событие JSF, который может сделать это вместо использования сценария Java.

Спасибо за вашу помощь.

<h:commandButton id="dmyButton" 

значение = "# {mngBean.getSomething}" ActionListener = "# {mngBean.doSomething}" style = "display: none" тип = "отправить">

Java Script

<script language="JavaScript">
 $(document).ready(function() {
  if (document.getElementById('form:dmyButton').value == 'true') {
   document.getElementById('form:dmyButton').click();
  }

 });
</script>

Спасибо за всю вашу помощь заранее

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Я думаю, что PreRenderViewEvent - это то, что вы хотите.

http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/event/PreRenderViewEvent.html

Хотя в документах это не показано, preRenderViewEvent работает с событием f :. Я сейчас исправлю документы.

0 голосов
/ 18 августа 2010

PostAddToViewEvent обрабатывается «Во время фазы восстановления после добавления компонента в представление».(в соответствии с Java Server Faces 2.0 - Полная справка ), что означает, что он действительно находится на раннем этапе жизненного цикла (Restore View - это первая фаза жизненного цикла).PhaseListener поможет вам в этом случае, поскольку все они работают на стороне сервера, а не на стороне клиента.

Однако <f:ajax> можно применить к <h:body> с event="load".Я попробовал, но это не сработало, <f:ajax> упаковка <h:body> ничего не произошло, наоборот я получил Unable to attach <f:ajax> to non-ClientBehaviorHolder parent ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...