web-dev-qa-db-ja.com

POST h:commandButtonを使用して新しいウィンドウを開く

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

どうすればこれを達成できますか? JSF 2.0を使用しています。

12
vr3w3c9

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

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

ただし、これは、まったく同じ形式で実行されるall non-ajax(!)アクションに影響します。だからあなたが賢いなら、新しいウィンドウで開かないはずのアクションをajaxアクションにしてください。ただし、ajaxもJavaScriptであり、JSを使用したくないとのことです(PrimeFacesが実際にJavaScriptでいっぱいになっていることに気付いたら、ショックを受けないでください)。

絶対に1つのアクションに制限する必要がある場合は、JavaScriptに少しの助けを求めることはできません。

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

ターゲットを単一のアクションのみに制限する場合、フォームを初期状態にしたい場合があります。 oncklickアクションを使用して、フォームのターゲットを_blanページに設定します。クリック後、ページは新しいタブ/ページで開かれます(アクションイベントをトリガーします)。最後に、onblurアクションがトリガーされ、フォームが再び初期状態に設定されます(残りのボタンは_selfページで開きます)このコードを使用すると、h:commandbuttonだけに制限して新しいページで開くことができます。残りのボタンはセルフページで開かれます:

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