フォームanchors.xhtml
と
<h:commandButton action="#{anchorsBean.onRefresh}" value="Refresh" />
リダイレクトを使用して同じページに送信します。
public String onRefresh() {
refresh();
return "anchors?faces-redirect=true";
}
ViewExpiredException
セッションのタイムアウトやその他の理由によるものを避けたい。そのために、OmniFaces の復元可能なビュー ハンドラーを使用します。
<f:metadata>
<o:enableRestorableView />
</f:metadata>
しかし、驚いたことに、この時点でビューの有効期限が切れている場合、リダイレクト動作が失われます。POST 要求/応答が単純に行われます。詳細を掘り下げると、ナビゲーション/リダイレクトは通常UICommand
、アプリケーションの呼び出しフェーズでトリガーされることがわかりますが、復元されたビュールート<o:enableRestorableView />
には子がまったくないようです。したがって、リダイレクトを処理する必要があるデフォルトのアクション リスナーを呼び出すコマンド コンポーネントはありません。
Mojarra 2.1.19 と OmniFaces 1.4.1 を使用しています。ビューを作成するソースで確認できますが、RestorableViewHandler
それを構築しません:それが空の理由UIViewRoot
でしょうか? 明らかに、私がひどく見逃して誤解しているものがあります...
最も興味深いのは、カスタム例外ハンドラーで no を使用し<o:enableRestorableView />
て単純にイベントを削除するとViewExpiredException
、すべてが正常に機能します。FacesContext
たまたま完全にビルドされた が既に含まれていることですUIViewRoot
(<o:enableRestorableView />
含まれている場合、後で空のものに置き換えられます)。したがって、このようにして、本来の目的の動作が得られます。少なくとも、そのように見えます。しかし、この方法は間違いなく間違っていると思います。
これについての明確化を前もって感謝します。