我想在选中h:selectBoolean复选框时激活h:selectOneMenu。
<h:selectBooleanCheckbox value="#{user.rememberMe}" /> I agree
<h:selectOneMenu value="#{user.favCoffee1}">
<f:selectItem itemValue="Cream Latte" itemLabel="Coffee3 - Cream Latte" />
<f:selectItem itemValue="Extreme Mocha" itemLabel="Coffee3 - Extreme Mocha" />
<f:selectItem itemValue="Buena Vista" itemLabel="Coffee3 - Buena Vista" />
</h:selectOneMenu>
在我的情况下,我想让用户从h:selectOneMenu中选择值,只有当他选择这里接受网站条款时。
只需将另一个组件的 disabled
属性绑定到复选框值,并让复选框 ajax-update 另一个组件。
<h:selectBooleanCheckbox value="#{user.rememberMe}">
<f:ajax render="menu" />
</h:selectBooleanCheckbox>
<h:selectOneMenu id="menu" ... disabled="#{not user.rememberMe}">
...
</h:selectOneMenu>
您只需要确保持有由 disabled
(以及 rendered
和 readonly
) 属性绑定的属性的受管 Bean 具有视图作用域。参见 如何选择合适的 Bean 范围?
如果您想通过rendered
属性显示/隐藏它,而不是通过disabled
属性启用/禁用它,那么您需要将其包装在另一个组件中并 ajax-update 该包装器。参见 为什么当我想 ajax-update 时,我需要将一个带有 rendered="#{some}" 的组件嵌套在另一个组件中?
试试这个:
<h:selectBooleanCheckbox value="#{user.rememberMe}" onchange="submit()"/> I agree
<h:selectOneMenu value="#{user.favCoffee1}" disabled="#{not user.rememberMe}">
<f:selectItem itemValue="Cream Latte"
itemLabel="Coffee3 - Cream Latte" />
<f:selectItem itemValue="Extreme Mocha"
itemLabel="Coffee3 - Extreme Mocha" />
<f:selectItem itemValue="Buena Vista"
itemLabel="Coffee3 - Buena Vista" />
</h:selectOneMenu>