2012-07-23 38 views
10

我需要通過POST在一個新窗口中打開一個JSF頁面,單擊一個<h:commandButton>。我知道我可以使用JavaScript實現這一目標。但我想用JSF而不是JavaScript來實現這一點。使用h打開新窗口使用h:commandButton

我該如何做到這一點?我正在使用JSF 2.0。

+0

必須是一個窗口?或者它可以成爲一個新標籤? – Damian 2012-07-23 11:49:50

+0

新標籤也很好。當您點擊命令按鈕時,我想要在新選項卡中打開頁面。 – vr3w3c9 2012-07-23 11:51:43

+0

在一個commandLink中,你實現了這個添加target =「_ blank」,但是我認爲沒有辦法在沒有javascript的commandButton中做到這一點。 – Damian 2012-07-23 11:56:23

回答

28

唯一的非JS方法是在父<h:form>中設置target="_blank"

<h:form target="_blank"> 
    ... 
    <h:commandButton value="Open in new Window" /> 
</h:form> 

但是這會影響這是在非常相同的形式進行的所有非Ajax(!)的行動。所以如果你很聰明,就不應該在新窗口中打開一個Ajax動作。然而,ajax也是JavaScript,你提到你不想使用JS(我希望你一旦發現PrimeFaces實際上充滿了JavaScript)不會感到震驚。

如果您絕對需要將其限制爲單個操作,那麼您實際上無法到處尋求JavaScript的幫助。

<h:form> 
    ... 
    <h:commandButton value="Open in new Window" onclick="this.form.target='_blank'" /> 
</h:form> 
+0

非常感謝BalusC。它的工作:) – vr3w3c9 2012-07-25 03:45:31

+0

不客氣。 – BalusC 2012-07-25 10:52:51

3

當您將目標僅限制爲單個動作時,可能需要將表單轉換爲初始狀態。 通過oncklick動作,您可以將表單的目標設置爲_blan頁面。 點擊後,頁面將以新標籤頁/頁面打開(觸發操作事件)。 最後,觸發onb​​lur動作並將表單重新設置爲其初始狀態(其餘按鈕將在_self頁面中打開) 使用此代碼,您可以僅限制爲ah:commandbutton在新頁面中打開。 按鈕的其餘部分將在自己的頁面打開:

<h:commandButton 
     onclick="this.form.target='_blank'" 
     onblur="this.form.target='_self'" 
     id="listadoRebuts" 
     action="#{giaquaBusquedaCorte.abrirListadoRebuts}" 
     value="#{msg.seqVisorbtnRecibos}"> 
    </h:commandButton> 
+0

來自這個問題:*「我知道我可以使用JavaScript實現這一目標,但我希望使用JSF代碼而不是Javascript實現這一目標。」* – BalusC 2013-03-27 12:27:53