JSF dataTable 添加列 动态创建数据表 列

@Named
@ViewScoped
public class LiveRangeService implements Serializable {
    private List< Map<String, ColumnModel> > tableData;
    private List<ColumnModel> tableHeaderNames;


    public List<Map<String, ColumnModel>> getTableData() {
        return tableData;
    }
    public List<ColumnModel> getTableHeaderNames() {
        return tableHeaderNames;
    }

    public void PlayListMB() {
        tableData = new ArrayList< Map<String, ColumnModel> >();

        //Generate table header.
        tableHeaderNames = new ArrayList<ColumnModel>();
        for (int j = 0; j < 5; j++) {
              tableHeaderNames.add(new ColumnModel("header "+j, " col:"+ String.valueOf(j+1)));
        }

        //Generate table data.
        for (int i = 0; i < 10; i++) {
            Map<String, ColumnModel> playlist = new HashMap<String, ColumnModel>();
            for (int j = 0; j < 5; j++) {
                playlist.put(tableHeaderNames.get(j).key,new ColumnModel(tableHeaderNames.get(j).key,"row:" + String.valueOf(i+1) +" col:"+ String.valueOf(j+1)));
            }
            tableData.add(playlist);
        }
    }

    static public class ColumnModel implements Serializable {

        private String key;
        private String value;

        public ColumnModel(String key, String value) {
            this.key = key;
            this.value = value;
        }

        public String getKey() {
            return key;
        }

        public String getValue() {
            return value;
        }
    }

 

      <h:form>

                    <p:dataTable id="tbl" var="result"
                        value="#{liveRangeService.tableData}"
                        rendered="#{not empty liveRangeService.tableData}"
                        rowIndexVar="rowIndex"
                        >

                        <f:facet name="header">  header table </f:facet>

                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="序号" />
                            </f:facet>
                            <h:outputText value="#{rowIndex+1}" />
                        </p:column>

                        <p:columns value="#{liveRangeService.tableHeaderNames}"
                            var="mycolHeader" columnIndexVar="colIndex">
                            <f:facet name="header">
                                <h:outputText value="#{mycolHeader.value}" />

                            </f:facet>
                            <h:outputText value="#{result[mycolHeader.key].value}" />
                            <br />
                        </p:columns>

                    </p:dataTable>
                </h:form>

 

使用primefaces实现。需要一个表header的list,里面存放列的标题。数据存放在map里面,key是标题,value是值即可。使用自定义的ColumnModel类,是为了把标题和数据用key对应起来,真正的标题内容可以设定。


官方的示例:
http://www.primefaces.org/showcase/ui/data/datatable/columns.xhtml

 ------------------------------------------------------------------------------------------------

表头也可以直接写好,以后直接columns写入每列值就行。但是不写头,最后导出excel就没有头了。

                    <h:form>

                        <p:dataTable id="tbl" var="result"
                            value="#{liveRangeService.tableData}"
                            rendered="#{not empty liveRangeService.tableData}"
                            rowIndexVar="rowIndex"
                            paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown} {Exporters}"
                            paginator="true" style="margin-bottom:20px">
                            <f:facet name="{Exporters}">
                                <h:commandButton id="exportcvs" value="导出表格"
                                    class="btn btn-default">
                                    <p:dataExporter type="xls" target="tbl"
                                        fileName="#{liveRangeService.filename}" />
                                </h:commandButton>
                            </f:facet>
                            <f:facet name="header">  header table </f:facet>


                            <p:columnGroup type="header">
                                <p:row>
                                    <p:column rowspan="2" headerText="Player" />
                                    <p:column colspan="2" headerText="users" />
                                </p:row>
                                <p:row>
                                    <p:column headerText="number" />
                                    <p:column headerText="percent" />
                                </p:row>
                            </p:columnGroup>


                            <p:column>
                                <h:outputText value="my name" />
                            </p:column>



                            <p:columns value="#{liveRangeService.tableHeaderNames}"
                                var="mycolHeader" columnIndexVar="colIndex">

                                <h:outputText value="#{result[mycolHeader.key].value}" />
                                <br />
                            </p:columns>

                        </p:dataTable>
                    </h:form>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 JSF2.xdatatable分页控件与左侧菜单最简单应用   JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉表,p:dialog等,其它的分页p:datatable实际使用起来总有不如意的地方。richfaces还支持可视化开发,可惜就是控件开发进度相比其它的慢了很多。下面帖我的控件的使用方法:   下载地址:http://download.csdn.net/detail/ptianfeng/4802713 一、分页具体使用方法如下(不多说,直接给你些颜色看看): 1. xhtml文件:    <html xmlns:ems="http://www.ems.com.cn" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:dataTable id="tableId" value="#{userlogMBean.defaultDataModel}" var="var" rows="10"> <h:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <h:outputText value="#{var.sqlid}" /> </h:column> </h:dataTable> <ems:page id="pageId" for="tableId" maxPage="5" /> 2. 相应的Managedbean: [java] view plaincopy /** * EMS 11185 限时未达邮费奉还 * @author 螃蟹 */ @SuppressWarnings(value = "serial") @ManagedBean(name = "userlogMBean") @ViewScoped() public class UserlogMBean extends PageListBaseBean implements Serializable { public PagedListDataModel getDefaultDataModel() { if (defaultDataModel == null) { defaultDataModel = new PagedListDataModel(pageSize) { public DataPage fetchPage(int startRow, int pageSize) { ArrayList<UserlogVo> dataList = new ArrayList<UserlogVo>(); List<Userlog> list = dao.getObjectList(jpql, pageSize, startRow); if (list != null) { for (Userlog u : list) { UserlogVo vo = new UserlogVo(); vo.setSqlid(u.getSqlid()); vo.setCode(u.getCode()); vo.setDate(u.getDate()); vo.setStation(u.getStation()); vo.setUserid(u.getUserid()); vo.setText(u.getText()); dataList.add(vo); } } int size = dao.getCountOption(jpql); DataPage dataPage = new DataPage(size, startRow, dataList); return dataPage; } }; } return defaultDataModel; } } 提示:关于PageListBaseBean更多的信息,可以参阅我在百度的blog(百度改版后,让我很QF,所以转到CSDN来了): http://hi.baidu.com/kittopang/item/19af4e37c6ede2fae6bb7a11   至此,分页已经实现。下面是使用截图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值