2

「値」属性のマネージドBeanを動的に変更するにはどうすればよいですか? たとえば、h:inputText があり、入力されたテキストに応じて、マネージド Bean は #{studentBean.login} または #{lecturerBean.login} である必要があります。簡単な形式で:

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

「nameofbean」の代わりに別のel式を埋め込もうとしました:

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

しかし、うまくいきません。

4

2 に答える 2

7

ポリモーフィズムは、ビューではなく、モデルで実行する必要があります。

例えば

<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() {
        // ...
    }
}

そして最後にマネージド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";
}

そうしないと、別のタイプのを追加/削除するたびにビューを変更する必要がありますPerson。これは正しくないです。

于 2011-05-17T12:36:02.390 に答える
3

別の方法:

<h:inputText id="loginField1" value="#{bean1.login}" rendered="someCondition1"/>
<h:inputText id="loginField2" value="#{bean2.login}" rendered="someCondition2"/>
于 2011-05-17T09:49:58.990 に答える