我在尝试了解如何在登录我正在处理的应用程序时有条件地调用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放在它将导航到或在资源中的页面上不起作用。
有人知道如何帮我这个吗?非常感谢。
答案 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的对话框,