【问题标题】:How to get selected icefaces datatable row using radiobutton?如何使用单选按钮获取选定的 icefaces 数据表行?
【发布时间】:2011-06-20 00:53:48
【问题描述】:

如何使用单选按钮在 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 源代码,请看看你是否能找到一些东西。

【问题讨论】:

  • 如果您不显示生成的 HTML,非 IceFaces 用户将无法回答此问题。 JavaScript 在 HTML 的网络浏览器中运行,而不是在 JSF 的网络服务器中运行。
  • 生成的代码显示它在onkeypress 中,但在JSF 中您已将它放在onclick 中。嗯?

标签: javascript jsf radio-button icefaces


【解决方案1】:

您应该使用带有展开布局的 ice:selectOneRadio:

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

【讨论】:

  • 是的,这似乎是部分工作。现在我需要将行 id 传递给我的支持 bean,即左侧。非常感谢。
【解决方案2】:

每个单选按钮生成的 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 函数也放在了&lt;table&gt; 上。 JS函数显然根本不属于那里(除了onkeypress不正确,应该是onclick)。

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

【讨论】:

  • 我在上面添加了正确的 html 源代码,很抱歉在正确的 html 源代码中发布。
  • 我无法调用 valueChangeListener="#{bean.setSelectedItem}" 中指定的 setSelectedItem 方法
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 2011-07-28
  • 1970-01-01
  • 2015-01-28
  • 2011-04-21
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多