如何动态更改"value"属性的托管Bean?例如,我有h:inputText,根据键入的文本,管理的bean必须是#{studentBean.login}或#{lecturerBean.login}。以简化形式:
<h:inputText id="loginField" value="#{'nameofbean'.login}" />
我试图嵌入另一个el表达式而不是"nameofbean":
value="#{{userBean.specifyLogin()}.login}"
但它没有成功。
多态性应该在模型中完成,而不是在视图中完成。
例如
<h:inputText value="#{person.login}" />
跟
public interface Person {
public void login();
}
和
public class Student implements Person {
public void login() {
// ...
}
}
和
public class Lecturer implements Person {
public void login() {
// ...
}
}
最后在托管的豆子中
private Person person;
public String login() {
if (isStudent) person = new Student(); // Rather use factory.
// ...
if (isLecturer) person = new Lecturer(); // Rather use factory.
// ...
person.login();
// ...
return "home";
}
否则,每次添加/删除不同类型的Person
时都必须更改视图。这是不对的。
另一种方式:
<h:inputText id="loginField1" value="#{bean1.login}" rendered="someCondition1"/>
<h:inputText id="loginField2" value="#{bean2.login}" rendered="someCondition2"/>