h:selectOneRadio选择未被选中

时间:2012-10-05 19:46:24

标签: ajax jsf jsf-2

我有一个使用单选按钮选择行的表。单击radiobutton时,ajax会执行一些代码来更新另一个字段,然后渲染表单。一切正常,但无线电选择消失,所有单选按钮都未被选中。我不确定为什么会这样?单击该按钮,因此值不应更改。而且它不是onchange javascript,我删除了它作为测试,仍然是同样的问题。我也不能只渲染更新的字段,因为它与下面的代码分开,我得到一个servlet异常 - 未知的id错误(也许有人可以告诉我如何绕过它?)

<h:dataTable id="addClient" styleClass="dataTable"
    value="#{AddEntryMB.clientValues}" var="c" binding="#{AddEntryMB.dataTable}" 
                rendered="#{AddEntryMB.renderClientTable}">
    <f:facet name="header" >
                Select Client to Associate with Appointment
            </f:facet>

    <h:column>
        <f:facet name="header">Select</f:facet>

                <h:selectOneRadio valueChangeListener="#{AddEntryMB.setSelectedItem}" 
                    immediate="true" onchange="dataTableSelectOneRadio(this);" >
                        <f:selectItem itemValue="null" />
                        <f:ajax event="click" render="@form"/>
                </h:selectOneRadio>
    </h:column>

2 个答案:

答案 0 :(得分:0)

看起来您的选择的值不会保存在辅助bean中。

首先,您应该将h:selectOneRadio组件绑定到辅助bean值:

<h:selectOneRadio valueChangeListener="#{AddEntryMB.setSelectedItem}" value=#{c.radioValue} immediate="true" onchange="dataTableSelectOneRadio(this);" >

然后尝试在你的ajax中处理dataTable,如:

<f:ajax event="click" render="@form" execute="addClient"/>

另外,我还会在itemLabel旁添加itemValue以查看所选内容:

<f:selectItem itemValue="null" itemLabel="NULL"/>

答案 1 :(得分:0)

它未被选中,因为未在模型值中设置该值,并且表单由ajax刷新。您可以通过将值绑定到模型来阻止取消选择。

<h:selectOneRadio ... value="#{AddEntryMB.selected[c.id]}">

private Map<Long, Boolean> selected = new HashMap<Long, Boolean>(); // +getter

在此示例中,我假设#{c}表示的类型具有private Long id属性,表示唯一ID。