0

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

2 回答 2

0

It gets unselected because the value is not been set in a model value and the form get refreshed by ajax. You could prevent the unselection by binding the value to the model.

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

with

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

In this example, I assume that the type represented by #{c} has a private Long id property which represents the unique ID.

于 2012-10-07T01:15:34.807 回答
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"/>

于 2012-10-05T21:27:48.007 回答