h:selectOneRadio 的预设检查状态与直通元素
Preset checked state of h:selectOneRadio with passthrough elements
我正在尝试实施中描述的解决方案
<h:selectOneRadio> renders table element, how to avoid this?
<div class="form-group">
<h:outputLabel styleClass="control-label"
value="#{msgClient.legalPersonality} " />
Selected value : <h:outputText value="#{msgClient['legalPersonality.' += clientBean.clientDto.legalPersonality.label]}" />
<div>
<f:metadata>
<f:viewParam name="legalPersonality" value="#{clientBean.clientDto.legalPersonality}" />
</f:metadata>
<ui:repeat var="legalPersonality" value="#{clientBean.legalPersonalities}">
<label class="radio-inline">
<input type="radio" jsf:id="legal" pt:name="legalPersonality" value="#{legalPersonality}">
<f:ajax execute="@this" render="@form" />
</input>
<h:outputText value="#{msgClient['legalPersonality.' += legalPersonality.label]}" />
</label>
</ui:repeat>
</div>
</div>
一切似乎都正常,所选值已使用 f:ajax 组件正确更新(setter 以正确的值调用)但单选按钮从未被选中。我的意思是当我点击它时它会被选中,但之后它会立即取消选中。即使在页面加载时,使用 clientDto.legalPersonality 中的默认值,所有内容都未选中。
看起来像:http://oi58.tinypic.com/242788g.jpg
任何帮助将不胜感激。谢谢。
确实,您找到的问题中的示例过于简单化了。它缺少 checked
属性,这是在 ajax 呈现后预设页面加载 and/or 当前选择所必需的,就像您的情况一样。在HTML中,单选按钮的选中状态是通过设置checked
属性来实现的。
您可以使用 <f:passThroughAttribute>
来设置 checked
属性,从而确保在未选中的情况下设置 #{null}
,这样它就不会呈现 checked
属性。这是一个最小化的属性;即使我们使用 checked="false"
,HTML 仍会认为它已选中。
<input type="radio" jsf:id="legal" pt:name="legalPersonality" value="#{legalPersonality}">
<f:passThroughAttribute name="checked" value="#{legalPersonality eq clientBean.clientDto.legalPersonality ? 'checked' : null}" />
<f:ajax execute="@this" render="@form" />
</input>
您找到的问题中的示例已同时更新。谢谢!
我正在尝试实施中描述的解决方案 <h:selectOneRadio> renders table element, how to avoid this?
<div class="form-group">
<h:outputLabel styleClass="control-label"
value="#{msgClient.legalPersonality} " />
Selected value : <h:outputText value="#{msgClient['legalPersonality.' += clientBean.clientDto.legalPersonality.label]}" />
<div>
<f:metadata>
<f:viewParam name="legalPersonality" value="#{clientBean.clientDto.legalPersonality}" />
</f:metadata>
<ui:repeat var="legalPersonality" value="#{clientBean.legalPersonalities}">
<label class="radio-inline">
<input type="radio" jsf:id="legal" pt:name="legalPersonality" value="#{legalPersonality}">
<f:ajax execute="@this" render="@form" />
</input>
<h:outputText value="#{msgClient['legalPersonality.' += legalPersonality.label]}" />
</label>
</ui:repeat>
</div>
</div>
一切似乎都正常,所选值已使用 f:ajax 组件正确更新(setter 以正确的值调用)但单选按钮从未被选中。我的意思是当我点击它时它会被选中,但之后它会立即取消选中。即使在页面加载时,使用 clientDto.legalPersonality 中的默认值,所有内容都未选中。
看起来像:http://oi58.tinypic.com/242788g.jpg
任何帮助将不胜感激。谢谢。
确实,您找到的问题中的示例过于简单化了。它缺少 checked
属性,这是在 ajax 呈现后预设页面加载 and/or 当前选择所必需的,就像您的情况一样。在HTML中,单选按钮的选中状态是通过设置checked
属性来实现的。
您可以使用 <f:passThroughAttribute>
来设置 checked
属性,从而确保在未选中的情况下设置 #{null}
,这样它就不会呈现 checked
属性。这是一个最小化的属性;即使我们使用 checked="false"
,HTML 仍会认为它已选中。
<input type="radio" jsf:id="legal" pt:name="legalPersonality" value="#{legalPersonality}">
<f:passThroughAttribute name="checked" value="#{legalPersonality eq clientBean.clientDto.legalPersonality ? 'checked' : null}" />
<f:ajax execute="@this" render="@form" />
</input>
您找到的问题中的示例已同时更新。谢谢!