我有一个使用单选按钮选择行的表。单击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>
答案 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。