これらのリンク コンポーネントのいずれかを使用してターゲットを新しいウィンドウで開くには、target="_blank"
属性を指定する必要がありますが、これは、リンクをクリックした時点で既に新しいウィンドウでターゲットを開いているため、応答に依存しません。基本的には、応答が到着した瞬間にターゲットを新しいウィンドウで開く必要があります。唯一の方法は、Web ブラウザーで実行されるように、JavaScriptwindow.open()
呼び出しを応答に返すことです。
window.open()
標準の JSF では、JavaScript を条件付きでレンダリングするだけで済みます。
<h:form>
<h:inputText value="#{bean.url}" />
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<h:outputScript rendered="#{bean.valid}">window.open('#{bean.url}')</h:outputScript>
</h:form>
と
private String url;
private boolean valid;
public void submit() {
valid = validate(url);
}
// ...
PrimeFaces ではRequestContext#execute()
、応答の完了時に実行する必要がある JavaScript コードを指定するために使用できます。
<h:form>
<p:inputText value="#{bean.url}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
と
private String url;
public void submit() {
if (validate(url)) {
RequestContext.getCurrentInstance().execute("window.open('" + url + "')");
}
}
// ...
具体的な問題とは関係ありません:あなたが引用した乱暴なステートメントは、HTTP/HTML の基本 (GET と POST の制限など) について何も知らない人によって書かれているようです。程よい塩加減でお召し上がりください。