当前位置:  开发笔记 > 编程语言 > 正文

如何在JSF数据表中显示行索引

如何解决《如何在JSF数据表中显示行索引》经验,为你挑选了3个好方法。

在JSF dataTable中,我想显示行旁边的行索引...如:

Column A    Column B
1           xxx
2           yyy

我认为我可以使用像#{rowIndex}这样的隐式el变量,但这不起作用.

我找到的解决方案是为数据表创建绑定并使用绑定,如:


    #{controller.dataTable.rowIndex}
    value

但是当我在页面中有许多嵌套的dataTable时,这个解决方案很复杂并且不能很好地工作.

关于如何以更好的方式解决这个问题的任何想法?



1> Brent Clay..:

这个解决方案由Jamie Williams在CodeRanch上发布.他说这适用于战斧.我正在使用primefaces,它也支持它.

  
      
          
      


Ursula的评论:"感谢您使用rowIndexVar的解决方案.我使用的是JSF 1.2和myFaces,它只能在行中没有空格+ 1 `"

2> McDowell..:

现有的解决方案并不会让我感觉不好.只要您引用嵌套表的模型,rowIndex就应该在嵌套表中工作.

    
        
            
                
                    
                
                
                    
                
            
        
    

样品型号:

public class NestedDataModel extends DataModel implements Serializable {

    private List> nestedDataModel = populateModel();
    private int index;

    private List> populateModel() {
        List> list = new ArrayList>();
        for(int x=0; x<3; x++) {
            List nestedTableData = new ArrayList();
            for(int y=0; y<3; y++) {
                nestedTableData.add("Foo x="+x+" y="+y);
            }
            list.add(nestedTableData);
        }
        return list;
    }

    @Override
    public int getRowCount() {
        return nestedDataModel.size();
    }

    @Override
    public Object getRowData() {
        List list = nestedDataModel.get(index);
        return new ListDataModel(list);
    }

    @Override
    public int getRowIndex() {
        return index;
    }

    @Override
    public Object getWrappedData() {
        return nestedDataModel;
    }

    @Override
    public boolean isRowAvailable() {
        return index >= 0 && index < nestedDataModel.size();
    }

    @Override
    public void setRowIndex(int arg0) {
        index = arg0;
    }

    @Override
    public void setWrappedData(Object arg0) {
        throw new UnsupportedOperationException();
    }

}

通常应该避免嵌套数据表 - 如果您不小心(例如,让它们成为表单的子项),这可能导致在提交的生命周期的每个阶段对表子项进行O(N ^ 2)传递(并且生命周期中有6个阶段).


对于模型外部的东西,您可以在托管bean中使用一个简单的计数器:

public class RowCounter implements Serializable {

    private transient int row = 0;

    public int getRow() {
        return ++row;
    }

}

配置:


    rowCounter
    tablerows.RowCounter
    request

视图:


    
        
            
        
        
            
        
    

这是有效的,因为bean是请求范围并绑定到表单外部的只读控件.它不适用于嵌套的dataTable,除非您希望行计数器对视图是全局的.但是,我不相信行索引应该是视图的函数.

对于嵌套的dataTable,最好从行bean中提供行索引.如果您决定对数据集进行分页等操作,它会为您提供更多控制.


尼斯.为什么从JSF数据表获取行号这么复杂?维护JSF的人是否讨厌所有其他开发人员并且他们故意试图让它变得困难?

3> Yuri..:

在RichFaces中有一个类似于布伦特的解决方案:


    
        Index
        
    
    
        Name
        
    

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有