jsf动态改变托管bean

发布于 2024-11-08 01:16:32 字数 343 浏览 0 评论 0原文

如何动态更改托管 bean 的“value”属性?例如,我有 h:inputText,并且根据输入的文本,托管 bean 必须是 #{studentBean.login} 或 #{lecturerBean.login}。以简化的形式:

<h:inputText id="loginField" value="#{'nameofbean'.login}" />

我尝试嵌入另一个 el 表达式而不是“nameofbean”:

value="#{{userBean.specifyLogin()}.login}"

但它没有成功。

How can I dynamically change managed bean of "value" attribute? For example, I have h:inputText and, depending on typed-in text, managed bean must be #{studentBean.login} or #{lecturerBean.login}. In a simplified form:

<h:inputText id="loginField" value="#{'nameofbean'.login}" />

I tried to embed another el-expression instead of 'nameofbean':

value="#{{userBean.specifyLogin()}.login}"

but it doesn't worked out.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

離殇 2024-11-15 01:16:32

多态性应该在模型中完成,而不是在视图中完成。

例如,

<h:inputText value="#{person.login}" />

使用

public interface Person {
    public void login();
}

and

public class Student implements Person {
    public void login() {
        // ...
    }
}

public class Lecturer implements Person {
    public void login() {
        // ...
    }
}

在托管 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";
}

finally,否则每次添加/删除不同类型的 Person 时都必须更改视图。这是不对的。

Polymorphism should rather be done in the model, not in the view.

E.g.

<h:inputText value="#{person.login}" />

with

public interface Person {
    public void login();
}

and

public class Student implements Person {
    public void login() {
        // ...
    }
}

and

public class Lecturer implements Person {
    public void login() {
        // ...
    }
}

and finally in the managed 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";
}

Otherwise you have to change the view everytime when you add/remove a different type of Person. This is not right.

成熟稳重的好男人 2024-11-15 01:16:32

另一种方式:

<h:inputText id="loginField1" value="#{bean1.login}" rendered="someCondition1"/>
<h:inputText id="loginField2" value="#{bean2.login}" rendered="someCondition2"/>

Another way:

<h:inputText id="loginField1" value="#{bean1.login}" rendered="someCondition1"/>
<h:inputText id="loginField2" value="#{bean2.login}" rendered="someCondition2"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文