在rich:extendedDataTable(RichFaces 4.x)中显示/隐藏列

时间:2011-07-25 07:18:17

标签: java jsf richfaces

版本4.x的rich:extendedDataTable的RichFaces'显示/隐藏列功能不再可用。 有任何想法如何以其他方式实现它?

我尝试使用JavaScript,使用document.getElementById()函数并设置元素的style.display属性,但很难按ID查找元素,因为rich:table中的所有元素都是动态生成。

任何帮助和提示都将不胜感激。

3 个答案:

答案 0 :(得分:1)

在Richfaces 4.x extendedDataTable中,您可以使用css样式同时控制该列的标题和正文。使用前缀“.rf-edt-c-”和列id创建每列的css样式。如果您有一个ID为“column1”的列,则css样式将为“.rf-edt-c-column1”。以下是在Java Script中隐藏/显示列id的列的示例。

<script type="text/javascript">
//<![CDATA[ 

    function hideColumn(columnId)
    {
        var styleSheets = document.styleSheets;
        for(var i=0;i<styleSheets.length;i++)
        {
            var rules = null;

            // IE and Chrome
            if(styleSheets[i].rules != null)
            {
                rules = styleSheets[i].rules;
            }
            // Firefox
            else if(styleSheets[i].cssRules != null)
            {
                rules = styleSheets[i].cssRules;
            }

            for(var j=0;j<rules.length;j++)
            {
                // Find the css style of that column
                if(rules[j].selectorText==".rf-edt-c-" + columnId)
                {
                    rules[j].style.display = "none";
                }
            }
        }
    }

    function showColumn(columnId)
    {
        var styleSheets = document.styleSheets;
        for(var i=0;i<styleSheets.length;i++)
        {
            var rules = null;

            // IE and Chrome
            if(styleSheets[i].rules != null)
            {
                rules = styleSheets[i].rules;
            }
            // Firefox
            else if(styleSheets[i].cssRules != null)
            {
                rules = styleSheets[i].cssRules;
            }

            for(var j=0;j<rules.length;j++)
            {
                // Find the css style of that column
                if(rules[j].selectorText==".rf-edt-c-" + columnId)
                {
                    rules[j].style.display = "";
                }
            }
        }
    }

//]]>
</script>

答案 1 :(得分:-1)

visible="false"属性放在the rich:column标记中,如下所示:

<rich:column id="name" label="Name" sortable="true" sortBy="#{edt.name}" visible="false">

错误的RichFaces版本,抱歉。

答案 2 :(得分:-1)

我在rich:column属性中添加了这个:

width="#{myBean.testDisplay('toDisplay')?'':'0px;border:none;'}"

这比使用rendered要好,因为rendered会对列重新排列产生错误。