代码之家  ›  专栏  ›  技术社区  ›  Achaius

如何使用jsf为表中的每一行获取单选按钮组功能

  •  3
  • Achaius  · 技术社区  · 14 年前

    如何使用 h:selectOneRadio 封装在 rich:dataTable

    row1   col1   col2   col3
    
    row2   radio1 radio1 radio1
    
    row3   radio2 radio2 radio2
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Community CDub    7 年前

    我认为有三种方法:

    1. 使用战斧 <t:selectOneRadio> <t:radio> Bozho . 这是最简单的解决办法。唯一的缺点是您必须在项目中集成另一个组件库( Tomahawk ). 但是,此库与其他库兼容,例如 Richfaces Icefaces .

    2. 为此创建自己的组件。这比前面的解决方案更复杂,并且可能不像前面的解决方案那样有趣 战斧 库已提供此组件。。。

    3. <h:selectOneRadio/> 组件,然后使用 Javascript <h:selectManyCheckbox> pageDirection lineDirection 布局。所以我决定用 布局,然后使用Javascript操作生成的HTML代码,将列表分成两部分。

    下面是我对JSF代码所做的:

    <h:selectManyCheckbox id="rolesSelection" value="#{myRolesBean.selectedRoles}" layout="pageDirection">
        <f:selectItems value="#{myRolesBean.RolesList}"/>
    </h:selectManyCheckbox>
    
    <script type="text/javascript">
        splitElementsIntoTwoColumns("myForm\\:rolesSelection");
    </script>
    

    以及Javascript函数(使用 jQuery ,捆绑在 Richfaces 图书馆):

    function splitElementsIntoTwoColumns(tableId) {
        var idx = 1;
        var row, next;
        while ((row = jQuery('#' + tableId + ' tr:nth-child(' + idx++ + ')')).length) {
            if ((next = jQuery('#' + tableId + ' tr:nth-child(' + idx + ')')).length) {
                row.append(next.find('td'));
                next.remove();
            }
        }
    }
    

    (有关此代码的更多说明) here )

    在您的例子中,Javascript函数将更难编写,因为您希望在由 <rich:datatable> .

        2
  •  5
  •   Bozho    14 年前

    你可以用战斧的 <t:selectOneRadio> layout="spread" <t:radio> <rich:column>