我正在尝试实现中描述的解决方案 <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
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
事实上,您发现的问题中的示例有点过于简单。它缺少checked
属性,这是在页面加载时和/或在ajax渲染之后预设当前选择所必需的。在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>
您发现的问题中的示例同时已更新。谢谢!