0

我在 JSF managedbean 中有一些不同范围的变量(我觉得)。在以下代码段中,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

至于具体问题,只需将 bean 分成 2 个单独的 bean。由于某些不清楚的原因,您显然是通过 Spring 而不是 JSF 或 CDI 管理 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 管理 bean @Named,则可以使用@Inject它。


回到具体的功能需求,

而且我觉得 roleList 不应该在会话范围内,因为它只会在注册页面期间填充在组合框中。我想请求范围就足够了。

这是一个很弱的理由。如果是我,我会把它放在应用程序范围内。无论如何,每个请求/会话的角色列表都是相同的,对吧?然后,您不需要在每个请求上重新加载/重新填充它,除非您的内存占用非常非常低。

也可以看看:

于 2013-03-26T15:10:47.717 回答