のクリックで POST によって新しいウィンドウで JSF ページを開く必要があります<h:commandButton>
。JavaScriptを使用してこれを達成できることを知っています。しかし、JavaScript ではなく JSF を使用してこれを実現したいと考えています。
どうすればこれを達成できますか?JSF 2.0 を使用しています。
のクリックで POST によって新しいウィンドウで JSF ページを開く必要があります<h:commandButton>
。JavaScriptを使用してこれを達成できることを知っています。しかし、JavaScript ではなく JSF を使用してこれを実現したいと考えています。
どうすればこれを達成できますか?JSF 2.0 を使用しています。
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>
対象を単一のアクションのみに制限する場合、フォームを初期状態で取得したい場合があります。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>