选中Richfaces Treenode的全部框

时间:2013-07-04 03:23:03

标签: java jsf tree richfaces treenode

尝试创建一个复选框以检查treenode中的所有项目。我是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>

我将警报放在那里进行测试;它甚至没有被召唤。我很确定我的语法正确,所以这让我摸不着头脑。

1 个答案:

答案 0 :(得分:0)

为了遇到同样问题的人的利益回答我自己的问题。

显然我不能使用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;
    }
}