jsf-后台动态生成richfaces的dataTable
2011-08-16 20:01
381 查看
因为项目需要表格的列不固定,所以我想在后台动态生成rich的dataTable
因为我对这个也不是很熟,所以一步一步来
第一步:添加一列从后台取数据。
前台页面:
<rich:dataTable id="fiSalaryDetailTable" var="detail" binding="#{salaryDetailBean.fiSalaryDetailTable}"
cellpadding="0" cellspacing="0" style="width:700px;"
value="#{salaryDetailBean.detailDataModel}"
styleClass="datatable-cellStyle" headerClass="standardTable_Header"
footerClass="standardTable_Header" rowKeyVar="index"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_ColumnCentered,standardTable_ColumnLefted,
standardTable_ColumnLefted,standardTable_ColumnLefted,
standardTable_ColumnLefted"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#ffffff'">
</rich:dataTable>
后台方法:
public ListDataModel getDetailDataModel() {
if(detailDataModel == null){
detailDataModel = new ListDataModel();
List<VSalaryDetail> vSalaryDetail = salaryDetailSer.queryVSalaryDetailByAccountNo(accountNo);
System.err.println("vSalaryDetail:"+vSalaryDetail.size());
detailDataModel.setWrappedData(vSalaryDetail);
}
return detailDataModel;
}
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
}
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
column.getChildren().add(header);
fiSalaryDetailTable.getChildren().add(column);
return fiSalaryDetailTable;
}
/**
* 获取value expression
* @param ve
* @return
*/
private ValueExpression getValueExpression(String ve){
return Expressions.instance().createValueExpression(ve).toUnifiedValueExpression();
}
这样就可以简单的构建 一个了。在构建时报异常:
严重: Servlet.service() for servlet jsp threw exception
java.lang.ClassNotFoundException: org.jboss.el.lang.FunctionMapperImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
我从网上下载了一个jboss-el.jar放到项目中就可以了。
第二步:加带header
页面代码:不变如上
后台代码:仅上面的getFiSalaryDetailTable()方法改变,其它未变.
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
}
HtmlColumnGroup columnGroup = new HtmlColumnGroup(); //加rich:columnGroup用来放表的列名的列
HtmlColumn headerColumn = new HtmlColumn(); //定义一列放列名内容
HtmlOutputText headerText = new HtmlOutputText(); //列名的内容
headerText.setValue("员工名称");
headerColumn.getChildren().add(headerText); //给列加内容
columnGroup.getChildren().add(headerColumn); //给列组加列
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
column.getChildren().add(header);
fiSalaryDetailTable.setHeader(columnGroup); //给表格加header
fiSalaryDetailTable.getChildren().add(column);
return fiSalaryDetailTable;
}
这个也是一个很简单的静态的。
第三步:优化完善以后的,增加了一个自带的分页工具条,并加了一些css样式,都很简单
页面代码:加了一个<h:form>,因为加了分页工具条的原因,否则会报异常
<h:form>
<rich:dataTable id="fiSalaryDetailTable" var="detail" binding="#{salaryDetailBean.fiSalaryDetailTable}"
cellpadding="0" cellspacing="0" style="width:700px;"
value="#{salaryDetailBean.detailDataModel}"
styleClass="datatable-cellStyle" headerClass="standardTable_Header"
footerClass="standardTable_Header" rowKeyVar="index"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_ColumnCentered,standardTable_ColumnLefted,
standardTable_ColumnLefted,standardTable_ColumnLefted,
standardTable_ColumnLefted"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#ffffff'">
</rich:dataTable>
</h:form>
后台代码:也仅仅是修改了一下 getFiSalaryDetailTable() 方法。
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
HtmlColumnGroup columnGroup = new HtmlColumnGroup();
HtmlColumn headerColumn = new HtmlColumn();
HtmlOutputText headerText = new HtmlOutputText();
headerText.setValue("员工名称");
headerColumn.getChildren().add(headerText);
columnGroup.setColumnClasses("datatable-cellStyle");
columnGroup.getChildren().add(headerColumn);
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
header.setStyleClass("fontStyle"); //给header设置css
column.getChildren().add(header);
fiSalaryDetailTable.setHeader(columnGroup);
fiSalaryDetailTable.getChildren().add(column);
fiSalaryDetailTable.setRows(15); //设置每页多少行。
HtmlDatascroller dataScroller = new HtmlDatascroller(); //分页工具条
dataScroller.setFor("fiSalaryDetailTable"); //设置给哪个表加上
dataScroller.setMaxPages(19); //最大页数
dataScroller.setAlign("left"); //设置align属性值
fiSalaryDetailTable.setFooter(dataScroller); //设置底部
}
return fiSalaryDetailTable;
}
对于动态生成,只要根据业务条件生成就可以了。
添加时间转换器
HtmlOutputText columnValueText = new HtmlOutputText();
DateTimeConverter dateConvert = new DateTimeConverter();
dateConvert.setPattern("yyyy-MM-dd");
columnValueText.setConverter(dateConvert);
因为我对这个也不是很熟,所以一步一步来
第一步:添加一列从后台取数据。
前台页面:
<rich:dataTable id="fiSalaryDetailTable" var="detail" binding="#{salaryDetailBean.fiSalaryDetailTable}"
cellpadding="0" cellspacing="0" style="width:700px;"
value="#{salaryDetailBean.detailDataModel}"
styleClass="datatable-cellStyle" headerClass="standardTable_Header"
footerClass="standardTable_Header" rowKeyVar="index"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_ColumnCentered,standardTable_ColumnLefted,
standardTable_ColumnLefted,standardTable_ColumnLefted,
standardTable_ColumnLefted"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#ffffff'">
</rich:dataTable>
后台方法:
public ListDataModel getDetailDataModel() {
if(detailDataModel == null){
detailDataModel = new ListDataModel();
List<VSalaryDetail> vSalaryDetail = salaryDetailSer.queryVSalaryDetailByAccountNo(accountNo);
System.err.println("vSalaryDetail:"+vSalaryDetail.size());
detailDataModel.setWrappedData(vSalaryDetail);
}
return detailDataModel;
}
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
}
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
column.getChildren().add(header);
fiSalaryDetailTable.getChildren().add(column);
return fiSalaryDetailTable;
}
/**
* 获取value expression
* @param ve
* @return
*/
private ValueExpression getValueExpression(String ve){
return Expressions.instance().createValueExpression(ve).toUnifiedValueExpression();
}
这样就可以简单的构建 一个了。在构建时报异常:
严重: Servlet.service() for servlet jsp threw exception
java.lang.ClassNotFoundException: org.jboss.el.lang.FunctionMapperImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
我从网上下载了一个jboss-el.jar放到项目中就可以了。
第二步:加带header
页面代码:不变如上
后台代码:仅上面的getFiSalaryDetailTable()方法改变,其它未变.
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
}
HtmlColumnGroup columnGroup = new HtmlColumnGroup(); //加rich:columnGroup用来放表的列名的列
HtmlColumn headerColumn = new HtmlColumn(); //定义一列放列名内容
HtmlOutputText headerText = new HtmlOutputText(); //列名的内容
headerText.setValue("员工名称");
headerColumn.getChildren().add(headerText); //给列加内容
columnGroup.getChildren().add(headerColumn); //给列组加列
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
column.getChildren().add(header);
fiSalaryDetailTable.setHeader(columnGroup); //给表格加header
fiSalaryDetailTable.getChildren().add(column);
return fiSalaryDetailTable;
}
这个也是一个很简单的静态的。
第三步:优化完善以后的,增加了一个自带的分页工具条,并加了一些css样式,都很简单
页面代码:加了一个<h:form>,因为加了分页工具条的原因,否则会报异常
<h:form>
<rich:dataTable id="fiSalaryDetailTable" var="detail" binding="#{salaryDetailBean.fiSalaryDetailTable}"
cellpadding="0" cellspacing="0" style="width:700px;"
value="#{salaryDetailBean.detailDataModel}"
styleClass="datatable-cellStyle" headerClass="standardTable_Header"
footerClass="standardTable_Header" rowKeyVar="index"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_ColumnCentered,standardTable_ColumnLefted,
standardTable_ColumnLefted,standardTable_ColumnLefted,
standardTable_ColumnLefted"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
onRowMouseOut="this.style.backgroundColor='#ffffff'">
</rich:dataTable>
</h:form>
后台代码:也仅仅是修改了一下 getFiSalaryDetailTable() 方法。
public HtmlDataTable getFiSalaryDetailTable() {
System.err.println("vSalaryDetail:=========:"+fiSalaryDetailTable);
if(fiSalaryDetailTable == null){
fiSalaryDetailTable = new HtmlDataTable();
HtmlColumnGroup columnGroup = new HtmlColumnGroup();
HtmlColumn headerColumn = new HtmlColumn();
HtmlOutputText headerText = new HtmlOutputText();
headerText.setValue("员工名称");
headerColumn.getChildren().add(headerText);
columnGroup.setColumnClasses("datatable-cellStyle");
columnGroup.getChildren().add(headerColumn);
HtmlColumn column = new HtmlColumn();
HtmlOutputText header = new HtmlOutputText();
header.setValueExpression("value", getValueExpression("#{detail.empName}"));
header.setStyleClass("fontStyle"); //给header设置css
column.getChildren().add(header);
fiSalaryDetailTable.setHeader(columnGroup);
fiSalaryDetailTable.getChildren().add(column);
fiSalaryDetailTable.setRows(15); //设置每页多少行。
HtmlDatascroller dataScroller = new HtmlDatascroller(); //分页工具条
dataScroller.setFor("fiSalaryDetailTable"); //设置给哪个表加上
dataScroller.setMaxPages(19); //最大页数
dataScroller.setAlign("left"); //设置align属性值
fiSalaryDetailTable.setFooter(dataScroller); //设置底部
}
return fiSalaryDetailTable;
}
对于动态生成,只要根据业务条件生成就可以了。
添加时间转换器
HtmlOutputText columnValueText = new HtmlOutputText();
DateTimeConverter dateConvert = new DateTimeConverter();
dateConvert.setPattern("yyyy-MM-dd");
columnValueText.setConverter(dateConvert);
相关文章推荐
- JSF: 动态生成的DataTable, 固定表头, 固定行标,
- JSF: 动态生成的DataTable, 固定表头, 固定行标
- JSF: 动态生成的DataTable, 固定表头, 固定行标
- JSF: 动态生成的DataTable, 固定表头, 固定行标,
- JSF: 动态生成的DataTable, 固定表头, 固定行标
- JSF: 动态生成的DataTable, 固定表头, 固定行标
- 后台动态生成table表格
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码
- C# 后台动态生成textbox
- C#如何根据DataTable生成泛型List或者动态类型list
- JSF动态生成组件
- 动态生成DataTable
- 在网络后台动态生成图片,项目使用到 转载之
- php后台管理,结合权限,动态生成栏目列表
- C#利用定时任务插件实现在后台线程中批量把动态文件生成静态文件方法
- 动态生成的多个select表单提交到后台
- ASP.NET 后台动态生成CheckBOx控件并获取选中的值
- 根据后台传的数据动态生成grid的列和store的注意事项
- JSF动态生成组件
- silverlight中后台动态生成权限树结构