<h:selectBooleanCheckbox id="deactivate" title="select to deactivate" />
我的JSF页面上有一个复选框和一个按钮。我希望仅在选中复选框后才能启用按钮。
JSF的方法是什么,而我的Java类上没有手动javascript也没有监听器方法。应该可以用类似的表达方式做到这一点;
"panel group rendered=#{}"
渲染一个按钮以启用,渲染一个按钮或禁用一个按钮。
最佳答案
What is the JSF way of doing this with no javascript and no listener method on my java class
这是绝对不可能的。我收集到的实际上是“没有手动编写的JavaScript”(因此您接受
<f:ajax>
使用的JSF生成的JavaScript)和“没有手动编写的监听器方法”(因此您在组件树状态上接受了JSF自己的魔力)。在这种情况下,应这样做:
<h:form>
<h:selectBooleanCheckbox binding="#{checkbox}">
<f:ajax render="button" />
</h:selectBooleanCheckbox>
<h:commandButton id="button" value="submit"
action="#{bean.submit}"
disabled="#{not checkbox.value}" />
</h:form>
就这样。不需要其他的JS代码,JSF bean属性或监听器方法。只是一个submit()
操作方法。在此示例中,
binding
属性会将 UIComponent
的 <h:selectBooleanCheckbox>
引用放在Facelet范围内的变量名checkbox
下。 EL表达式 #{checkbox.value}
返回组件的value
属性,该属性表示在 UISelectBoolean
组件已经为boolean
的情况下,准备在命令组件的disabled
属性中使用。注意:如果在较早的Eclipse版本中的
disabled="#{not checkbox.value}"
行遇到错误的EL错误,则需要按以下方式进行配置:窗口>首选项> Web> JavaServer Faces工具>验证>输入强制问题>一元运算 bool 强制问题将其设置为“警告”或“忽略”,而不是“错误”。从Eclipse Mars开始,这不再是必须的。也可以看看:
关于jsf - JSF复选框监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167377/