0

フォーム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 />含まれている場合、後で空のものに置き換えられます)。したがって、このようにして、本来の目的の動作が得られます。少なくとも、そのように見えます。しかし、この方法は間違いなく間違っていると思います。

これについての明確化を前もって感謝します。

4

0 に答える 0