2013-04-10 58 views
0

我在試圖弄清楚如何在登錄我正在處理的應用程序時有條件地調用JavaScript時遇到了一個最有趣的問題。基本上,我只想要一個JavaScript彈出消息顯示,如果用戶已成功登錄。將PrimeFaces用於條件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"/> 

然後在我的豆,我有以下代碼:

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

爲什麼你不能在用戶登陸頁面上使用<body onload="hello()">?或者你可以用PrimeFaces effect組件做得更好。

+0

的JavaScript代碼的目的是從頁讀取隱藏值,然後顯示在彈出消息中。當我在我的commendButton上有一個無條件的onclick =「javascript_function()」時,這部分也適用。 – csharp 2013-04-10 13:08:58

0

你做錯了,你的導航不會在登錄時發生,但實際上在'OK'按鈕的onclick上。

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