【问题标题】:Check All box for Richfaces Treenode选中 Richfaces Treenode 的所有框
【发布时间】:2013-07-04 03:23:02
【问题描述】:

尝试创建一个复选框来检查树节点中的所有项目。我对 JSF 有点陌生,所以我很困惑如何在树而不是表上实现它。这是当前代码:

<rich:panel style="width:400px;">           
            <h:selectBooleanCheckbox id="vehicleAll" onclick="selectAllModel(this.checked);">
            </h:selectBooleanCheckbox>
            <h:outputText value="  ALL"/>
        <rich:tree id="vehicleTree" switchType="client" 
            value="#{applicationScope.demoModelGrpList}" var="node" ajaxKeys="#{null}"
            binding="#{demoRptController.vehicleUiTree}"
            nodeSelectListener="#{demoRptController.selectionListener}"
            changeExpandListener="#{demoRptController.expansionListener}"
            ajaxSubmitSelection="true">
            <rich:treeNode id="modelNode" ajaxSingle="true" 
                icon="/images/pixel_node.gif" iconLeaf="/images/pixel_node.gif">
                <h:selectBooleanCheckbox id="cbxNode" value="#{node.selected}" style="position:relative; float:left; left:-22px;" class="vcBx">
                </h:selectBooleanCheckbox>
                <h:outputText value="#{node.name}" style="position:relative; float:left; left:-16px;"/>
            </rich:treeNode>
        </rich:tree>
    </rich:panel>

脚本是:

<script type="text/javascript">
<![CDATA[
function selectAllModel(checks) {
    alert("calling select all");
    var array = document.getElementsByTagName("input");
    for(var i = 0; i < array.length; i++)
    {
       if(array[i].type == "checkbox")
       {
          if(array[i].className == "vcBx")
           {
            array[i].checked = checks;
           }
       }
    }
}
    ]]>
</script>

我把警报放在那里是为了测试;它甚至没有被调用。我很确定我的语法是正确的,所以这让我摸不着头脑。

【问题讨论】:

  • 只需使用 jquery 或 javascript 即可。让树中的所有复选框都有 styleClass=foo,在主复选框的 onclick 上,调用一个 javascript 函数,该函数选择所有输入元素类型复选框 class=foo 以具有与主复选框相同的选中/取消选中值
  • 在我的情况下似乎不起作用,尝试做类似的事情: var inputs = document.getElementsByTagName('input'); for (var i=0;i
  • 这是一个使用 jquery 来选择复选框的简单问题,Stackoverflow 已经为此提供了很多答案,请研究。乍一看,这是一个很有希望的答案stackoverflow.com/questions/14925874/…
  • 遗憾的是,我不能为此使用 jQuery,否则我可能早就解决了。我已经解决这个问题两天了,我似乎真的找不到只使用 java/javascript 的解决方案。它必须是一个树节点的事实确实使事情变得复杂,因为通常用于按类或 id 选择的方法似乎不起作用。由于树节点的性质,分配名称也会给我一个重复名称错误。
  • 我发现了一个大问题;该函数根本没有被调用!我将用我的新脚本编辑我的原件。

标签: java jsf tree richfaces treenode


【解决方案1】:

为了任何有同样问题的人的利益,回答我自己的问题。

显然我不能使用 select 作为函数名。这解决了一个问题;我只需要重命名该函数,现在它被调用了。

为了解决另一个问题(未选中复选框),我必须查找由 treenode 生成的特定 id。看到只有一位与节点的索引有关的变化,我设置了下面指​​定的循环以逐个选中复选框并根据 ALL 复选框的状态进行更改。有点令人费解,但这是我发现满足需要做的最好的方法。根据我的实验,通过输入或类型复选框进行选择似乎不适用于抓取 h:selectBooleanCheckbox。如果我在这方面错了,请随时纠正我。

或者,您可以使用 indexOf 使用节点的 id,但我只需要选择父节点而不需要任何子节点,因为这样做也选择了所有子节点。

function ccAllModel(checks) {
    for (var i = 0; i < 9; i++) {
        var vehicleId = "demoRptForm:vehicleTree:" + i + "::cbxNode";
        var array = document.getElementById(vehicleId);
        array.checked = checks.checked;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多