事件发生时动态显示panelGroup(JSF / ICEFACES)

时间:2012-05-29 05:43:21

标签: java jsf icefaces

我想动态显示一个panelGroup。

在这段代码中,我有可以填充的方框。当最后一个可用框填满数据时,应显示带有一组新框的panelGroup。

<ice:panelGroup binding="#{myPage.boxes0to9}" />
<ice:panelGroup binding="#{myPage.boxes10to19}" />

如果只填写了#{myPage.boxes0to9}中的最后一个框,我怎么让第二个panelGroup显示?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过使用div包装<ice:panelGroup>并通过javascript检查显示/隐藏它来实现它:

<script type="text/javascript">
    var arrInputs = new Array(9);
    function checkInputsFulfilled(value, index) {
        arrInputs[index] = (value == "");
        var filled = true;
        for(var i = 0; i < arrInputs.length; i++) {
            if (arrInputs[i]) {
                filled = false;
                break;
            }
        }
        document.getElementById("myDiv").style.display = filled ? "block" : "none";
    }
</script>

<ice:panelGroup binding="#{myPage.boxes0to9}">
    <!-- your 9 inputs (or more) here, I'll write 1 as a sample -->
    <h:inputText value="#{myBean.attribute1}" onchange="checkInputsFulfilled(this.value, 0);" />
</ice:panelGroup>
<div id="myDiv" style="display:none">
    <ice:panelGroup binding="#{myPage.boxes10to19}">
    </ice:panelGroup>
</div>

您也可以使用ajax支持并渲染一个包装第二个<ice:panelGroup>的JSF组件,但是当您只清空其中一个启动输入并且该组应该隐藏时,这将产生很大的影响。当然,这最后一个行为是在javascript中控制的,如果你不想要它只是修改它:)。