JSFbean属性初始化
我有一个名为User的托管bean,它有一个名为name的字符串属性:JSFbean属性初始化,jsf,properties,init,managed-bean,Jsf,Properties,Init,Managed Bean,我有一个名为User的托管bean,它有一个名为name的字符串属性: public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 我有另一个名为UserManager的托管bean,它的属性类型为User,
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我有另一个名为UserManager的托管bean,它的属性类型为User,允许您将用户添加到用户列表中:
public class UserManager {
private List<User> userList = new ArrayList<User>();
private User user;
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
public String addUser() {
userList.add(user);
return "_USERADDED";
}
}
我的问题是,这是初始化属性的正确方法,还是可以从JSF文件和/或配置文件中进行初始化?是的,您应该自己创建它。JSF/EL不会自动创建嵌套属性。规范方法是为此使用
@PostConstruct
@ManagedBean
@RequestScoped
public class UserManager {
private List<User> userList = new ArrayList<User>();
private User user;
@PostConstruct
public void init() {
user = new User();
}
public String addUser() {
userList.add(user);
return "_USERADDED";
}
public User getUser() {
return user;
}
}
@ManagedBean
@请求范围
公共类用户管理器{
private List userList=new ArrayList();
私人用户;
@施工后
public void init(){
user=新用户();
}
公共字符串addUser(){
添加(用户);
返回“\u USERADDED”;
}
公共用户getUser(){
返回用户;
}
}
注意,我省略了setter,因为JSF/EL从未使用过它。我仍然想知道
userList
在那里做什么,它不属于那里。我假设它只是一个用于测试的存根。在这种情况下,它最好是由@ManagedProperty
注入的应用程序或会话范围的bean是的,您应该自己创建它。JSF/EL不会自动创建嵌套属性。规范方法是为此使用@PostConstruct
@ManagedBean
@RequestScoped
public class UserManager {
private List<User> userList = new ArrayList<User>();
private User user;
@PostConstruct
public void init() {
user = new User();
}
public String addUser() {
userList.add(user);
return "_USERADDED";
}
public User getUser() {
return user;
}
}
@ManagedBean
@请求范围
公共类用户管理器{
private List userList=new ArrayList();
私人用户;
@施工后
public void init(){
user=新用户();
}
公共字符串addUser(){
添加(用户);
返回“\u USERADDED”;
}
公共用户getUser(){
返回用户;
}
}
注意,我省略了setter,因为JSF/EL从未使用过它。我仍然想知道
userList
在那里做什么,它不属于那里。我假设它只是一个用于测试的存根。在这种情况下,最好是由@ManagedProperty
注入的应用程序或会话范围的bean。首先,最好添加托管bean的范围:@RequestScoped
,@ViewScoped
,等等。其次,您不能只添加一个托管bean到另一个bean的引用,它们是类,但您不管理它们的创建,JSF容器将管理它们。最好的选择是首先定义实体,然后在托管bean中使用它们。经验法则:企业实体!=JSF(或CDI)托管bean。首先,最好添加托管bean的作用域:@RequestScoped
,@ViewScoped
,等等。其次,您不能只将一个托管bean的引用添加到另一个,它们是类,但您不管理它们的创建,JSF容器会这样做。最好的选择是首先定义实体,然后在托管bean中使用它们。经验法则:企业实体!=JSF(或CDI)托管bean。
@ManagedBean
@RequestScoped
public class UserManager {
private List<User> userList = new ArrayList<User>();
private User user;
@PostConstruct
public void init() {
user = new User();
}
public String addUser() {
userList.add(user);
return "_USERADDED";
}
public User getUser() {
return user;
}
}