2012-07-23 21 views
10

<h:commandButton>のクリックでPOSTによって新しいウィンドウでJSFページを開く必要があります。私はJavaScriptを使用してこれを達成できることを知っています。しかし、私はJSFではなくJavaScriptを使用してこれを実現したいと思います。h:commandButtonを使用してPOSTで新しいウィンドウを開く

どうすればこの問題を解決できますか?私はJSF 2.0を使用しています。

+0

はウィンドウでなければなりませんか?それとも新しいタブにすることができますか? – Damian

+0

新しいタブも正常です。コマンドボタンをクリックすると、新しいタブでページを開くことができます。 – vr3w3c9

+0

をcommandLinkに追加すると、target = "_ blank"を追加することができますが、javascriptなしでcommandButtonでこれを行う方法はないと思います。 – Damian

答えて

28

唯一のJS以外の方法は、target="_blank"を親の<h:form>に設定することです。

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

しかし、これは非常に同じ形で行われているすべての非アヤックス(!)アクションを影響します。あなたがスマートならば、新しいウィンドウで開くべきではないアクションをajaxアクションにしてください。しかし、ajaxもJavaScriptであり、あなたはJSを使いたくないと言いました(PrimeFacesが実際にJavaScriptでいっぱいであることを知った後は驚かないことを願っています)。

これを1つのアクションに制限する必要がある場合は、JavaScriptにほとんど助けを借りることができません。

+0

ありがとうBalusC。それは働いた:) – vr3w3c9

+0

ようこそ。 – BalusC

3

ターゲットを1つのアクションだけに制限すると、初期状態でフォームを取得したいことがあります。 oncklickアクションを使用すると、フォームのターゲットを_blanページに設定します。 クリックすると、ページが新しいタブ/ページで開かれます(アクションイベントがトリガーされます)。 最後に、onblurアクションがトリガされ、フォームを初期状態に再設定します(残りのボタンは_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

関連する問題