作業中のアプリケーションにログインするときに条件付きで 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.