JSF: выбор значения в одном раскрывающемся меню позволяет включить другое раскрывающееся меню - PullRequest
1 голос
/ 31 мая 2011

Допустим, у меня есть два раскрывающихся списка selectOneMenu:

Раскрывающийся список A:

<h:selectOneMenu value="valA"
immediate="false"                                           
required="true"                                             
valueChangeListener="#{JavaClass.someJavaMethod}"                                           
id="caImplClassSelector"                                            
rendered="#{JavaClass.someOtherMethod}">

Раскрывающийся список B:

<h:selectOneMenu value="valB"
immediate="false"                                           
required="true"                                             
valueChangeListener="#{JavaClass.someJavaMethod}"                                           
id="caImplClassSelector"
disabled="what should I write here?"                                            
rendered="#{JavaClass.someOtherMethod}">

Как я могуубедитесь, что раскрывающийся список B отключен, пока пользователь не выберет значение в раскрывающемся списке A?Я могу создать метод в JavaClass, который возвращает истину или ложь в зависимости от того, было ли выбрано значение в раскрывающемся списке А или нет, но есть ли способ сделать это выше без создания этого метода?

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Я понятия не имею, какие версии JSF / RF вы используете, так что вот только общий ответ.

Привязать значение 1-го раскрывающегося списка к свойству бина:

<h:selectOneMenu value="#{bean.firstMenu}">

Тогда пусть атрибут disabled 2-го раскрывающегося списка перехватывает на этом:

<h:selectOneMenu disabled="#{bean.firstMenu == null}">

Обратите внимание, что с JSF2 / RF4 вам не нужны хаки valueChangeListener / immediate, которые использовались в старых версиях JSF 1.x без ajax.

1 голос
/ 01 июня 2011

Объявите логическое свойство в управляемом компоненте и сгенерируйте для него методы получения и установки.

По умолчанию установите значение true.

В <h:selectOneMenu value="valA" immediate="false"<br> required="true"<br> valueChangeListener="#{JavaClass.someJavaMethod}"<br> id="caImplClassSelector"<br> rendered="#{JavaClass.someOtherMethod}">

В первом раскрывающемся списке на основе логики приложения для прослушивателя изменения значения установите для свойства disabled значение false.

Во втором раскрывающемся списке см. Отключенное свойство.

Возможно, вам нужна дополнительная логика.

...