我已經擁有一個String屬性託管bean稱爲用戶名爲名稱:JSF Bean屬性初始化
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我有一個名爲的UserManager另一個託管bean具有類型用戶的屬性,並允許您添加用戶用戶列表:
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頁面添加用戶如下所示:
<h:form>
<h:inputText value="#{userManager.user.name}"/>
<h:commandButton value="Add User" action="#{userManager.addUser}"/>
</h:form>
我遇到的問題是當我運行我的頁面並單擊「添加用戶」按鈕時出現以下錯誤:
adduser.xhtml @ 11,50 value =「#{userManager.user.name}」 :目標不可達,「空」因事實的UserManager的用戶屬性爲null,我試圖訪問它來設置屬性名返回null
我假設這個錯誤。
我能得到這個工作,如果我改變的UserManager並初始化用戶屬性:
private User user = new User();
我的問題是,這是初始化屬性的正確方式或我能做到這一點從JSF文件中和/或配置文件?
首先,最好添加託管bean的範圍:'@ RequestScoped','@ ViewScoped'等等。第二,您不能只將託管bean的引用添加到另一個託管bean ,他們是類,但你不管理他們的創建,JSF容器會。最好的選擇是首先定義你的實體,然後在託管的bean中使用它們。經驗法則:商業實體!= JSF(或CDI)託管bean。 –