2012-07-27 70 views
3

我需要在下面的代碼如何在onclick之前執行h:commandButton actionListener?

   <h:commandButton id="WhatifButtonID" value="#{demandBean.dmdReviewScreenLabelVO.whatIf}" style="width:60px; height:22px;" actionListener="#{demandBean.whatif}" onclick="window.open('DemandTargetList.xhtml','whatif','width=460,height=280,top=150,left=350,resizable=no,scrollbars=no')" > 
        <f:ajax execute="@this" ></f:ajax> 
       </h:commandButton> 

在上述情況下一些幫助,onclick屬性被執行第一隨後的ActionListener屬性。我想首先執行actionListener屬性,然後再執行onclick函數,因爲加載onclick的頁面需要從actionListener獲取特定值。請讓我知道如何獲得同樣的結果。提前致謝。

回答

4

<f:ajax>渲染完成的腳本。

<h:commandButton value="#{demandBean.dmdReviewScreenLabelVO.whatIf}" actionListener="#{demandBean.whatif}"> 
    <f:ajax execute="@this" render="popupScript" /> 
</h:commandButton> 
<h:panelGroup id="popupScript"> 
    <h:outputScript rendered="#{demandBean.whatifPressed}"> 
     window.open('DemandTargetList.xhtml','whatif','width=460,height=280,top=150,left=350,resizable=no,scrollbars=no'); 
    </h:outputScript> 
</h:panelGroup> 

其中您在whatif()方法設置whatifPressedtrue

+0

非常感謝BalusC做出如此快速的迴應。它確實有幫助。但加載彈出窗口的時間似乎有點多。你也可以讓我知道屬性的執行順序。我如何知道首先執行哪個屬性。 – vr3w3c9 2012-07-27 13:03:15

+2

如果您瞭解HTML/JS的工作方式(因爲這基本上都是JSF生成的),這很容易。因此,通過體面的HTML/JS教程,然後查看JSF生成的HTML/JS代碼(瀏覽器中的右鍵頁面並執行* View Source *)應該足夠清晰。 – BalusC 2012-07-27 13:07:24

0

PrimeFaces可以通過使用<p:remoteCommand/>標籤來解決這個問題。然後,您可以使用普通的舊按鈕來調用remoteCommand,然後只需執行window.open()。

<p:remoteCommand name="viewSomething" actionListener="#{someActionIWantToExecuteBeforeOpeningWindow}" update="@this" process="@this"/> 
<button onclick="viewSomething(); window.open('http://somewhere.com', 'windowName', 'height=924,width=723');">Click me!</button> 

如果您調用javascript函數,它會創建一些獨特的東西,您可以在項目列表上使用它。

相關問題