preRender
リスナーは、最初のリクエストかポストバック リクエストかに関係なく、レンダリング前のイベントで常に呼び出されます。通常のリクエストか ajax リクエストかに関係なく、すべてのリクエストにはレンダリング レスポンス フェーズがあります。したがって、この動作は仕様によるものです。ポストバック リクエストかどうかをチェックして、リスナー メソッドで自分自身をチェックする必要がありますFacesContext#isPostback()
。
public void sendComment() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
ちなみに( <f:event type="preRenderXxx">
where Xxx
can beView
またはComponent
) は、本質的に、最初のリクエストでビューパラメーターが処理された後に Bean アクションメソッドを呼び出すことができるという機能要件の「回避策」です。今後の JSF 2.2 では、<f:viewAction>
意図したとおりに機能する新しいタグが導入されます。
<f:viewAction action="#{newsBean.sendComment}" />
このタグは、onPostback
すでにデフォルトで に設定されている属性をサポートしていますfalse
:
<f:viewAction action="#{newsBean.sendComment}" onPostback="false" />
JSF 2.2 は 2012 年の第 1 クォートにリリースされる予定です。JSF 2.2 のスナップショット リリースは現在すでに利用可能です。