1

こんな感じをJSFで実装したい(検索画面の一部)代替テキスト

「 + 」ボタンをクリックすると新しい行が動的に追加され、「 - 」ボタンをクリックすると行が削除されます。問題は、値 (動的に作成された行のユーザー入力) をバッキング モデルにバインドすることです。

セッション スコープのバッキング Bean を作成しました。コードの一部、

public class BackingBean{
  //other code

  private List<Criteria> searchFilters; // Each criteria is bound to a row

  public void init(){
   //init code
  }
  public void addEmptyCriteria(){
    searchFilters.add(MyFactory.createNewCriteria());
  }

}

+ボタンのアクションはaddEmtpyCriteria メソッドをトリガーし、(a4j を使用して) セクション全体を (新しい行で) 再レンダリングします。

これは単なるボイラープレートであり、Bean がセッション スコープである限り、すべてが正常に機能します。ただし、リクエストスコープに含める方がより直感的です。1 回の検索は、ユーザーによって行われる 1 回の要求であり、ユーザー セッションに関連付けられることはありません。また、セッションにあると、開発者は、新しい検索画面を表示するために、セッションからバッキング Bean をクリア/削除する必要があります。

これを行うより良い方法はありますか?セッションスコープに入れるのは正しいですか?

4

1 に答える 1

1

viewJSF 2.0 を使用している場合は、Bean をスコープに入れるだけです。

@ManagedBean
@ViewScoped
public class BackingBean {
    // ...
}

まだ JSF 1.x を使用している場合、最善の策は を使用することa4j:keepAliveです。Bean リクエストのスコープを設定し、JSF ページに以下を追加します。

<a4j:keepAlive beanName="managedBeanName" />

Ajax4jsf を使用していない場合は、トマホークの t:saveState. 基本的に同じです。

<t:saveState value="#{managedBeanName}" />
于 2010-09-15T18:03:01.900 に答える