13

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

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

4

2 に答える 2

33

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

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

ただし、これはまったく同じ形式で実行されるすべての非 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>
于 2012-07-24T13:08:32.303 に答える
5

対象を単一のアクションのみに制限する場合、フォームを初期状態で取得したい場合があります。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>
于 2013-03-27T09:52:24.060 に答える