我在JSF managedbean中有一些变量具有不同的范围(我觉得)。 在以下代码段中, login()和 register()方法中使用 userTable 。 但 roleList 仅用于register()方法。
userTable 应该在会话范围内,因为它应该在用户会话期间可访问。
我觉得 roleList 不应该在会话范围内,因为它只会在注册页面的组合框中填充。我想请求范围就足够了。
但是我如何将roleList放在requestScope中,因为UserManagedBean已经在会话范围内了。
非常感谢任何建议。
@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
}
答案 0 :(得分: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 @ManagedBean
管理bean,则可以使用@ManagedProperty
。如果您通过CDI @Named
管理bean,则可以使用@Inject
。
回到具体的功能要求,
我觉得roleList不应该在会话范围内,因为它只会在注册页面的组合框中填充。我想请求范围就足够了。
这是一个非常弱的原因。如果是我,我会把它放在应用范围内。无论如何,角色列表对于每个请求/会话都是相同的,对吧?然后,您不需要在每个请求上重新加载/重新填充它,除非您的内存占用非常非常少。