JSF:在一个下拉列表中选择值可以启用另一个下拉列表

时间:2011-05-31 19:02:15

标签: java jsf richfaces

假设我有两个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}">

如果用户在下拉列表A中选择一个值,我怎样才能确保下拉列表B被禁用?我可以在JavaClass中创建一个返回true或false的方法,具体取决于是否已经选择了下拉列表A中的值,但有没有办法在不使用该方法的情况下执行上述操作?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

我不知道你使用的是什么JSF / RF版本,所以这里只是一个通用的答案。

将第一个下拉列表的值绑定到bean属性:

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

然后让第二个下拉列表的disabled属性拦截:

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

请注意,使用JSF2 / RF4,您不需要在旧的无Ajax JSF 1.x版本中使用的valueChangeListener / immediate hacks。

答案 1 :(得分:1)

在托管bean中声明一个布尔属性,并为其生成getter和setter方法。

默认情况下将其设置为true。

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

在第一个基于值更改侦听器的应用程序逻辑的下拉列表中,将disabled属性设置为false。

在第二个下拉菜单中,请参阅已禁用的属性。

您可能需要处理一些额外的逻辑。