使用PrimeFaces进行条件JavaScript执行

时间:2013-04-10 12:38:22

标签: javascript jsf primefaces

我在尝试了解如何在登录我正在处理的应用程序时有条件地调用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消息中单击“确定”,然后它应该导航到该页面。

相反,没有显示弹出窗口,它会直接显示到所需的页面,因此在它有机会执行JavaScript之前,它看起来好像离开了页面。如果我替换

,则会确认
return "option" + optNum;
// by
return "";

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

如何在离开页面之前获取执行JavaScript的代码?将JavaScript放在它将导航到或在资源中的页面上不起作用。

有人知道如何帮我这个吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

为什么不能在用户登录页面上仅使用<body onload="hello()">?或者您可以使用PrimeFaces effect组件更好地使用它。

答案 1 :(得分:0)

你做错了,导航不会在登录时发生,但实际上是在点击“确定”按钮时。

您可以使用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;
}

请参阅showcase以了解如何使用带有primefaces的对话框,

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