注册
 找回密码
 注册
江西广告网
查看: 308|回复: 0
打印 上一主题 下一主题

datatable动态添加列应当如何来实现

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-19 09:57:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
许多开发JSF的朋友可能会遇到这样的问题,如果DataTable的列不固定,需要动态生成, 应该如何实现呢。 假设FacesConfig中配置一个名为bean的MBean,该MBean中需定义一个类型为javax.faces.component.html.HtmlDataTable类型的变量dt,页面中的DataTable设置bingding="#{bean.dt}". 首先了解一下JSF中DataTable的渲染方式: DataTable --<Header> UIComponent --<Children>List<HtmlColumn> ----<HtmlColumn> ------<Header>UIComponent ----<Children>List<UIComponent> 因此,要在后台变更DataTable的状态,可以用dt.setHeader(UIComponent)设置DataTable的表头,然后可以往dt.getChildren()中添加HtmlColumn类型的列,同样,列中也可以由Header和Children组成。 代码实现如下: private void initialReportTable(List<ExcelReport> reportList) { dt.getChildren().clear(); for (ExcelReport report : reportList) { HtmlColumn column = new HtmlColumn(); HtmlOutputText header = new HtmlOutputText(); header.setValueExpression("value", getValueExpression("#{rmaReport.captions.c" report.getPosition() "}")); column.setHeader(header); HtmlOutputText value = new HtmlOutputText(); String ve = getVEString(report); System.out.println(report.getCaption() " : " ve); value.setValueExpression("value", getValueExpression(ve)); column.getChildren().add(value); dt.getChildren().add(column); } } 其中,动态建立控件的方法为直接创建一个控件,然后通过ValueExpression来设置控件在运行时显示的值,如果是Column中的数据,则可以使用#{tableVar.ColumnName}格式的EL表达式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表