使用PrimeFaces执行有条件的JavaScript



我有一个最有趣的问题,试图找出如何获得JavaScript有条件地调用时登录我正在工作的应用程序。基本上,我只希望在用户成功登录时显示一个JavaScript弹出消息。

在我的xhtml页面中,我有以下测试JavaScript函数,然后我有一个命令按钮如下:

  <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消息中单击"确定",然后应该导航到该页。

相反,没有弹出窗口显示,它直接进入所需的页面,所以看起来好像它在有机会执行JavaScript之前就从页面导航出去了。如果我替换 ,这将得到确认。
return "option" + optNum;
// by
return "";
方法末尾的

,因为弹出消息会在不尝试导航到下一页的情况下显示,并在单击"确定"后停留在该页上。然而,由于某种原因,我不明白为什么,有时它导航到所需的页面时,第二次点击按钮。

在从页面导航离开之前,我如何获得执行JavaScript的代码?把JavaScript放在它要导航到的页面上或资源中是行不通的。

有人知道怎么帮我吗?多谢。

为什么不能在用户登录页上只使用<body onload="hello()"> ?或者你可以用PrimeFaces效果组件做得更好。

你做错了,你的导航不是在登录时发生的,而是在点击'OK'按钮时发生的。

您可以使用p: dialog来显示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;
}

查看演示,了解如何使用dialog with primefaces,

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

最新更新