0

私はJSFマネージドビーンに異なるスコープを持ついくつかの変数を持っています(私は感じています)。次のスニペットでは、userTableがlogin( )メソッドとregister()メソッドの両方で使用されています。ただし、roleListはregister()メソッドでのみ使用されます。

userTableは、ユーザーセッション中にアクセス可能である必要があるため、セッションスコープ内にある必要があります。

また、 roleListは、登録ページでのみコンボボックスに入力されるため、セッションスコープに含めるべきではないように感じます。リクエストスコープで十分だと思います。

しかし、UserManagedBeanはすでにセッションスコープにあるので、どうすればroleListをrequestScopeに入れることができますか。

アドバイスありがとうございます。

@Named("user")
@Scope("session")
public class UserManagedBean implements Serializable {

    private UserTable userTable = new UserTable(); 
    private List roleList = new ArrayList();

    public String login() {
     // login process here
    }

    public String register() {
     // register user here
    }
4

1 に答える 1

0

具体的な質問としては、豆を2つの別々の豆に分割するだけです。何らかの理由でJSFやCDIではなくSpringでBeanを管理しているように見えるため、@Autowired一方のBeanをもう一方のBeanのプロパティとして注入するために使用できます。

@Named
@Scope("request")
public class Login implements Serializable {

    private List<Role> roles;

    @AutoWired
    private User user;

    public String submit() {
         UserTable userTable = user.getTable();
         // ...
    }

    // ...
}
@Named
@Scope("session")
public class User implements Serializable {

    private UserTable table;

    // ...
}

JSFでBeanを管理している場合は、そのために@ManagedBean使用できます@ManagedProperty。CDI@NamedでBeanを管理している場合は、そのために使用できます@Inject


具体的な機能要件に戻ると、

また、roleListは、登録ページでのみコンボボックスに入力されるため、セッションスコープに含めるべきではないように感じます。リクエストスコープで十分だと思います。

それはかなり弱い理由です。私だったら、アプリケーションスコープに入れていただろう。とにかく、ロールリストはすべてのリクエスト/セッションで同じですよね?メモリフットプリントが本当に非常に少ない場合を除いて、リクエストごとにリロード/再入力する必要はありません。

参照:

于 2013-03-26T15:10:47.717 に答える