【问题标题】:Multiple rows per record in JSF?JSF中每条记录多行?
【发布时间】:2010-09-26 05:21:13
【问题描述】:

有一个 myfaces 数据表,每条记录是否可以有 2 个 ? 我的简单单行表如下所示:

<h:dataTable id="somelist" value="#{MyBean.somelist}" var="item">
    <h:column>
        <f:facet name="header">
            <h:outputText value="ID"/>
        </f:facet>
        <h:outputText value="#{item.id}"/>
    </h:column>
</h:dataTable>

【问题讨论】:

    标签: java jsf datatable


    【解决方案1】:

    是的,在这种情况下。您可以通过自定义 DataModel 控制绑定到 outputText 的值。

    public class TwoRowModel extends DataModel {
    
        private List<Pair> values = initData();
        private int index = -1;
    
        private List<Pair> initData() {
            List<Pair> list = new ArrayList<Pair>();
            for (int i = 0; i < 5; i++) {
                Pair pair = new Pair();
                pair.key = "Key " + i;
                pair.value = "Value " + i;
                list.add(pair);
            }
            return list;
        }
    
        @Override
        public int getRowCount() {
            return values.size() * 2;
        }
    
        @Override
        public Object getRowData() {
            Pair pair = values.get(index / 2);
            if (index % 2 == 0) {
                return pair.key;
            } else {
                return pair.value;
            }
        }
    
        @Override
        public int getRowIndex() {
            return index;
        }
    
        @Override
        public Object getWrappedData() {
            throw new UnsupportedOperationException("Demo code");
        }
    
        @Override
        public boolean isRowAvailable() {
            int realIndex = index / 2;
            if (realIndex < 0) {
                return false;
            }
            if (realIndex >= values.size()) {
                return false;
            }
            return true;
        }
    
        @Override
        public void setRowIndex(int idx) {
            this.index = idx;
        }
    
        @Override
        public void setWrappedData(Object value) {
            throw new UnsupportedOperationException("Demo code");
        }
    
        class Pair {
            public String key;
            public String value;
        }
    
    }
    

    在这个演示代码中,返回的值就是要显示的值:

        <h:dataTable id="somelist" value="#{twoRowModel}" var="item">
            <h:column>
                <f:facet name="header">
                    <h:outputText value="ID" />
                </f:facet>
                <h:outputText value="#{item}" />
            </h:column>
        </h:dataTable>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多