您的位置:首页 > Web前端 > JavaScript

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: