JSF динамическое изменение управляемых - PullRequest
2 голосов
/ 17 мая 2011

Как я могу динамически изменить управляемый компонент с атрибутом «значение»? Например, у меня есть h: inputText и, в зависимости от введенного текста, управляемый бин должен быть # {studentBean.login} или # {lecturerBean.login}. В упрощенном виде:

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

Я попытался вставить другое el-выражение вместо 'nameofbean':

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

но это не сработало.

Ответы [ 2 ]

6 голосов
/ 17 мая 2011

Полиморфизм следует скорее делать в модели, а не на виде

и

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.Это не правильно.

3 голосов
/ 17 мая 2011

Другой способ:

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