4

メモリに保持したいアプリケーション スコープのコンテンツの大きなバッファがあります。Omnifaces を使用して、それを非常に簡単に行いましょう。

ただし、キャッシュを期限切れにする必要がある場合、それを行う方法はないようです。必要に応じて時間属性を設定できますが、それはこのパズルに対する理想的な答えではないようです。

基になるデータを強制的に更新するための提案はありますか?

ありがとう、

テマール

4

1 に答える 1

5

ただし、キャッシュを期限切れにする必要がある場合、それを行う方法はないようです。

タグ/コンポーネントには実際にはメソッドはありませんが、プログラムによる方法があります。これは、明示的なキーをキャッシュ エントリに割り当てた場合に最適に機能します。

<o:cache key="myCache">

   cached content here

</o:cache>

次に、バッキング Bean で、次のようにそのエントリのコンテンツを削除できます。

public void reset() {
    CacheFactory.getCache(Faces.getContext(), "session").remove("myCache");
}

デフォルトのスコープは「セッション」であるため、ここではそれが使用されていることに注意してください。タグに別のスコープ (「アプリケーション」など) を使用した場合は、バッキング Bean コードでそれを指定します。

キャッシュを期限切れにする必要があることがわかっている場合はいつでもこのメソッドを呼び出すことができます (たとえば、アクション メソッドがバッキング データを更新した場合)。または明示的なリセット ボタンを作成することもできます。

<h:form>
    <h:commandButton action="#{someBean.reset}" value="Reset cache" />
</h:form>

OmniFaces 1.5 では、o:cacheこれをもう少し簡単にするためにタグに属性を追加することを計画しており、エントリを手動で期限切れにする方法を示す例をショーケースに追加します。

于 2013-05-01T12:38:06.243 に答える