0

作業中のアプリケーションにログインするときに条件付きで JavaScript を呼び出す方法を見つけようとしているときに、非常に興味深い問題が発生しています。基本的に、ユーザーが正常にログオンした場合にのみ JavaScript ポップアップ メッセージが表示されるようにします。

私の xhtml ページには、次のテスト JavaScript 関数があり、その後、次のように commandButton があります。

  <script type="text/javascript">
  function hello() {
    alert("Hello from PrimeFaces calling JavaScript on the page");
  }
</script>

<-- Other html code -->

<p:commandButton id="login" value="Login" update="out" action="#{login.login}" styleClass="button"/>

次に、Bean に次のコードがあります。

    public String login() {

     // Other code

     // return "login" on failure - go back to login.xhtml

     // On success do the following:
     RequestContext context = RequestContext.getCurrentInstance();
     context.execute("hello()");
     return "option" + optNum; // Go on to option?.xhtml where ? = 1, 2, or 3
}

今のところ、私の JavaScript 関数は画面にテスト メッセージをポップアップ表示するだけですが、これを機能させることができれば、もっと便利なものを表示したいと考えています。

ログインが失敗した場合、エラーメッセージとともにログインページが再度表示され、正しく機能するという考え方です。ログインが成功すると、アプリケーションは optNum で指定されたページ番号に移動します。これも正しく動作します。ただし、次のページに移動する前にポップアップ メッセージを表示してから、JavaScript メッセージで [OK] をクリックすると、そのページに移動することになっています。

代わりに、ポップアップは表示されず、必要なページに直接移動するため、JavaScript を実行する前にそのページから移動したように見えます。これは交換したら確定

return "option" + optNum;
// by
return "";

at the end of the method, as the popup message is then displayed without it attempting to navigate to the next page, and stays on that page after clicking "OK". However, for some reason which I do not understand why, sometimes it navigates to the required page when clicking the button a second time.

How do I get the code to execute the JavaScript before navigating away from the page? Putting the JavaScript on the pages it will navigate to or in resources does not work.

Does anybody know how to help me with this? Many thanks.

4

2 に答える 2

0

ユーザーのランディング ページだけで使用できないのはなぜ<body onload="hello()">ですか?または、PrimeFacesエフェクトコンポーネントを使用するとより効果的です。

于 2013-04-10T12:59:18.383 に答える
0

ログイン時にナビゲーションが行われず、実際には「OK」ボタンのクリック時にナビゲーションが行われません。

p:daialog を使用して、JSF ポップアップを表示できます。

<p:commandButton id="login" value="Login" update="out" 
    action="#{login.login}" styleClass="button"/>

<p:dialog visible="#{login.loginSuccess}">
 <h:commandButton action="#{navigateToInbox}" value="ok" />
</p:dialog>

....

public String login() {

     // Other code

     // return "login" on failure - go back to login.xhtml

if(successfulLogin)
     loginSuccess = true;
}

ショーケースを参照して、primefaces でダイアログを使用する方法を理解してください。

http://www.primefaces.org/showcase/ui/dialog.jsf

于 2013-04-10T14:40:13.073 に答える