0

私は助けが必要です。私はJSFが初めてで、プロジェクトでJSF2とリッチフェイスを使用しています。

<f:ajax render="@form"/>更新ボタンで使用しているフォームをクリアしたい。その画面に ADD ボタンがあり、レコードを 1 つ追加します。更新をクリックすると、デフォルトのページに移動します。しかし、もう一度レコードを入力すると、以前に入力した値がフォーム フィールドに残ります。

誰でもこの問題で私を助けてもらえますか?

4

1 に答える 1

2

「I hit refresh」と言ったときにブラウザーの更新ボタンを意味すると仮定すると、ビュースコープのデータを保持する Bean をセッションスコープに誤って配置した場合に発生する可能性があります。次に、基本的に、フォームが以前に送信されたものとまったく同じ Bean を再利用しています。Bean をセッション スコープではなくビュー スコープに配置すると、この問題が解決するはずです。ビュー スコープは、別のページに移動するか、新しい要求を開始すると (ブラウザーの更新ボタンを押すなどして) 終了します。

以下も参照してください。


セッションスコープの使用に制限された悪い設計が原因である場合は更新してください。

<f:event type="preRenderView" listener="#{sessionScopedBeanWhichShouldActuallyBeViewScoped.resetModel}" />

public void resetModel() { 
    if (!FacesContext.getCurrentInstance().isPostback()) {
        model = null;
    }
}

これにより、すべての GET リクエストでモデルがクリアされます。ただし、このハッキングに関係なく、エンドユーザーが同じセッション内の別のブラウザー タブ/ウィンドウで同じビューを開くと、依然として深刻な問題が発生します。

正しい解決策は、前述のように、セッション スコープではなくビュー スコープに Bean を配置することです。

于 2012-10-24T15:01:15.910 に答える