kol*_*bok 2 java jsf jsf-2 managed-bean
如何动态更改"value"属性的托管bean?例如,我有h:inputText,并且根据输入的文本,托管bean必须是#{studentBean.login}或#{lecturerBean.login}.以简化形式:
<h:inputText id="loginField" value="#{'nameofbean'.login}" />
Run Code Online (Sandbox Code Playgroud)
我试图嵌入另一个el-expression而不是'nameofbean':
value="#{{userBean.specifyLogin()}.login}"
Run Code Online (Sandbox Code Playgroud)
但它没有成功.
多态性应该在模型中完成,而不是在视图中完成.
例如
<h:inputText value="#{person.login}" />
Run Code Online (Sandbox Code Playgroud)
同
public interface Person {
public void login();
}
Run Code Online (Sandbox Code Playgroud)
和
public class Student implements Person {
public void login() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class Lecturer implements Person {
public void login() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
最后在托管bean中
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";
}
Run Code Online (Sandbox Code Playgroud)
否则,每次添加/删除其他类型时都必须更改视图Person.这个不对.
| 归档时间: |
|
| 查看次数: |
2000 次 |
| 最近记录: |