Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSFbean属性初始化_Jsf_Properties_Init_Managed Bean - Fatal编程技术网

JSFbean属性初始化

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,

我有一个名为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 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;
    }

}