使用JSF Passthrough为单选按钮条件设置checked属性失效求助
JSF Passthrough单选按钮checked属性在条件返回null时仍生成空属性的解决办法(MyFaces 3.x)
在MyFaces 3.x中,使用JSF Passthrough属性绑定EL表达式时,若表达式返回null,框架会将属性渲染为checked=""而非完全移除该属性,这不符合预期需求。以下是两种可行的解决方式:
方法一:使用布尔值控制属性渲染
MyFaces对Passthrough属性的处理逻辑中,当属性值为Boolean.FALSE时,会跳过该属性的渲染。修改表达式,让条件不满足时返回false而非null:
<h:inputHidden id="testHidden" binding="#{testHidden}" value="1"/> <input type="radio" a:checked="#{testHidden.value eq '1' ? 'checked' : false}" jsf:id="test1" name="test1" value="1"/> <input type="radio" a:checked="#{testHidden.value eq '2' ? 'checked' : false}" jsf:id="test2" name="test2" value="2"/>
生成的HTML中,test2元素将不会包含checked属性:
<input type="hidden" id="viewDevicesSearchForm:testHidden" name="viewDevicesSearchForm:testHidden" value="1"> <input id="viewDevicesSearchForm:test1" name="test1" checked="checked" type="radio" value="1"> <input id="viewDevicesSearchForm:test2" name="test2" type="radio" value="2">
方法二:使用<f:passThroughAttribute>精确控制
通过<f:passThroughAttribute>标签的rendered属性,仅在条件满足时才渲染checked属性:
<h:inputHidden id="testHidden" binding="#{testHidden}" value="1"/> <input type="radio" jsf:id="test1" name="test1" value="1"> <f:passThroughAttribute name="checked" value="checked" rendered="#{testHidden.value eq '1'}"/> </input> <input type="radio" jsf:id="test2" name="test2" value="2"> <f:passThroughAttribute name="checked" value="checked" rendered="#{testHidden.value eq '2'}"/> </input>
这种方式更直观,明确控制属性的渲染时机,同样能达到条件不满足时不输出checked属性的效果。
内容的提问来源于stack exchange,提问作者HockChai Lim
相关产品推荐
相关产品推荐

