1

我正在尝试实现 <h:selectOneRadio> 呈现表格元素中描述的解决方案,如何避免这种情况?

<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

任何帮助将不胜感激。谢谢你。

4

1 回答 1

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> 

您找到的问题中的示例同时已更新。谢谢!

于 2015-09-27T17:10:20.657 回答