如何使用radiobutton获取选定的icefaces数据表行?

时间:2011-02-02 14:51:55

标签: javascript jsf radio-button icefaces

如何使用单选按钮在icefaces数据表中选择一行?

我尝试了以下

<h:selectOneRadio styleClass="none" valueChangeListener="#{bean.setSelectedItem}"
                onclick="dataTableSelectOneRadio(this);">
                <f:selectItem itemValue="null" />
            </h:selectOneRadio>

我的javascript

function dataTableSelectOneRadio(radio) {
    var id = radio.name.substring(radio.name.lastIndexOf(':'));
    var el = radio.form.elements;
    for (var i = 0; i < el.length; i++) {
        if (el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
            el[i].checked = false;
        }
    }
    radio.checked = true;
}

在另一篇文章中,我得到了一个答案,我应该用form.id替换form.name。然而,之后我收到错误

radio.form is undefined 
var elements = radio.form.elements;

有人可以帮我解决这个问题。

我想使用单选按钮在icefaces数据表中选择一行。

任何帮助都非常值得赞赏。

由于

发布我生成的html源

这里看到的是单选按钮的

的jsf代码
<h:selectOneRadio  valueChangeListener="#{bean.setSelectedItem}"
id="reqselect" onclick="dataTableSelectOneRadio(this);">
<f:selectItem itemValue="null" />
</h:selectOneRadio>

我真诚地为在正确的html源代码发布道歉,我正在测试其他一些东西,因此错误的来源被发布了。粘贴在下面是我正确的html源代码,请查看是否可以找到一些东西。

2 个答案:

答案 0 :(得分:2)

你应该使用ice:selectOneRadio和展开布局:

<ice:selectOneRadio id="myRadioId" layout="spread" ... /> 
<ice:dataTable ... >
    <ice:column ...>
        <ice:radio for="myRadioId" ... />
    </ice:column>
    ...
</ice:dataTable>

答案 1 :(得分:0)

以下是每个单选按钮的生成HTML的外观:

<table id="crud:tab_cr:9:_id53" border="0" onkeypress="dataTableSelectOneRadio(this);">
  <tr>
    <td>
      <input type="radio" name="crud:tab_cr:9:_id53" id="crud:tab_cr:9:_id53:_1" value="null" onkeypress="dataTableSelectOneRadio(this);Ice.util.radioCheckboxEnter(form,this,event);" />
      <label for="crud:tab_cr:9:_id53:_1">null</label>
    </td>
  </tr>
</table>

因此,IceFaces显然在单选按钮周围呈现了一个完整的HTML表格,并将JS函数放在<table>上。 JS函数显然根本不属于那里(除了onkeypress不正确之外,它应该是onclick)。

<h:selectOneRadio>默认情况下不会渲染整个表格。这只能意味着您使用<ice:selectOneRadio> 实际,或者IceFaces替换了<h:selectOneRadio>的标准渲染器。你需要在这个角落修复它。要么被<h:selectOneRadio>替换,要么向IceFaces报告错误,他们的无线电渲染器也错误地将JS函数放在<table>元素上。