JSF: 动态生成的DataTable, 固定表头, 固定行标

摘要:
当我编写动态生成的DataTable时,我还参考了许多相关文章并实现了固定的标题。我使用两个表来解决固定标头的问题,因为我发现如果我用JSF1.1实现固定标头,几乎不可能向每个标头添加CommandLink。然而,我动态生成的这些CommandLinks无法触发事件,这让我苦恼了三天……最后,我发现这个问题是因为我在生成CommandLinks时没有给每个CommandLinkSetID…我希望你能对我的代码提出有价值的建议,并一起取得进展。非常感谢。

自己写了段小代码, 希望可以供大家学习和参考。 代码里没有太多注释, 有时间的话我会补充上去。
自己在写动态生成DataTable的时候也查阅了很多相关文章, 以及实现固定表头等等。
在解决固定表头问题上我是用的两张表(加行标是3张表)实现的, 因为我发现如果用JSF1.1的化实现固定表头几乎不可能(如果有人有好的想法, 比如用JS比较在行的朋友请告诉我解决方法, 谢谢)
实现给每个Header加上一个CommandLink的时候我遇到了很大的问题, 就是无论如何我动态生成的这些CommandLink都没有办法触发事件(并不报错), 这个问题足足折磨了我3天。。。
最后终于发现问题的所在, 是因为我在生成CommandLink的时候没有给每个CommandLink SetID。。。 就加上这句话,问题立马解决。
我原来的代码是链接数据库的, 但是这样的化大家也没有办法参考, 所以我对代码少缴修改, 就算是个小例子吧, 可重用。
希望大家对我的代码提出宝贵意见,一起进步,谢谢。
截图:
JSF: 动态生成的DataTable, 固定表头, 固定行标第1张
Dynamic.jsp

<%@tagliburi="http://java.sun.com/jsf/core"prefix="f"%><%@tagliburi="http://java.sun.com/jsf/html"prefix="h"%><Scriptlanguage="JavaScript">vartdW;
//Scrollfunctionf_scroll(Col_T,Row_T,DivNm){
if(Col_T!=''){
document.getElementById(Col_T).scrollLeft
=document.getElementById(DivNm).scrollLeft;
}
if(Row_T!=''){
document.getElementById(Row_T).scrollTop
=document.getElementById(DivNm).scrollTop;
}
}
</Script><html><f:view><head><title>TABLE</title><linkrel="stylesheet"type="text/css"href="styles.css"></head><body><h:form><fontsize="2"color="black"
style
="position:absolute;left:35;top:5;200;height:20"><h:outputTextvalue="PleaseEnter:"/></font><h:inputTextvalue=""size="20"
style
="position:absolute;left:110;top:5;150;height:20"/><h:commandButtonvalue="Search"action=""
style
="position:absolute;left:270;top:5;50;height:20"/><tableBORDER=0
STYLE="POSITION:ABSOLUTE;LEFT:0px;TOP:30px;right:0px;bottom:0px;"><tr><tdSTYLE="text-align:right;"><!--Table1start--><!--Table1end--></td><td><!--Table2start--><DivID="Table2"
STYLE
="position:relative;top:0;border-left:0.5ptsolidblack;border-right:0.5ptsolidblack;height:17.75px;285px;overflow-x:hidden;"><h:dataTablevalue="#{myBean.myHeader}"var="myHeader"
binding
="#{myBean.headerDataTable}"bgcolor="white"border="1"
cellspacing
="1"rendered="true"styleClass="orders"
headerClass
="ordersHeader"rowClasses="evenColumn,oddColumn"
style
="position:absolute;left:0;top:0;100;height:10;border-collapse:collapse;"
id
="ree"></h:dataTable></Div><!--Table2end--></td></tr><tr><tdSTYLE="vertical-align:top;"><!--Table3start--><DivID="Table3"
STYLE
="border-bottom:0.5ptsolidblack;border-top:0.5ptsolidblack;25.5px;height:265px;overflow-y:hidden;position:relative;left:0;"><h:dataTablevalue="#{myBean.myNum}"var="myNum"
binding
="#{myBean.numDataTable}"bgcolor="white"border="1"
cellspacing
="1"rendered="true"styleClass="orders"
headerClass
="ordersHeader"rowClasses="evenColumn,oddColumn"
style
="position:absolute;left:0;top:0;32;height:5;border-collapse:collapse;"
id
="dee"></h:dataTable></Div><!--Table3end--></td><tdSTYLE="vertical-align:top;"><!--Table4start--><DivID="Table4"onScroll="f_scroll('Table2','Table3','Table4');"
STYLE
="height:281px;300px;overflow-y:scroll;overflow-x:scroll;"><h:dataTablevalue="#{myBean.myList}"var="myItem"
binding
="#{myBean.dynamicDataTable}"bgcolor="white"border="1"
cellspacing
="1"rendered="true"styleClass="orders"
headerClass
="ordersHeader"rowClasses="evenColumn,oddColumn"
style
="position:absolute;left:0;top:0;100;height:5;border-collapse:collapse;"></h:dataTable></Div><!--Table4end--></td></tr></table></h:form></body></f:view></html>

MyBean.java

packagemypackage;
importjava.util.ArrayList;
importjava.util.List;
importjavax.faces.application.Application;
importjavax.faces.component.UIColumn;
importjavax.faces.component.UIOutput;
importjavax.faces.component.html.HtmlCommandLink;
importjavax.faces.component.html.HtmlDataTable;
importjavax.faces.component.html.HtmlOutputText;
importjavax.faces.context.FacesContext;
importjavax.faces.el.MethodBinding;
importjavax.faces.el.ValueBinding;
importjavax.faces.event.ActionEvent;
publicclassMyBean{
privateList<List<String>>myList;
privateList<List<String>>myHeader;
privateList<List<Integer>>myNum;
privateHtmlDataTabledynamicDataTable;
privateHtmlDataTableheaderDataTable;
privateHtmlDataTablenumDataTable;
privatestaticinttempWidth=30;
//LoadDatafromDataBasetoEveryDataTable--------------------------------publicvoidloadMyList()throwsException{
myList
=newArrayList<List<String>>();
introw=25;
while(row>0){
intcolumn=25;
Stringstr
="o";
List
<String>tmpvector=newArrayList<String>();
while(column>0){
tmpvector.add(str);
column
--;
}
row
--;
myList.add(tmpvector);
}
}
publicvoidloadMyHeader()throwsException{
myHeader
=newArrayList<List<String>>();
Stringstr
="*****";
intcolumn=25;
List
<String>tmpvector=newArrayList<String>();
while(column>0){
tmpvector.add(str);
column
--;
}
myHeader.add(tmpvector);
}
publicvoidloadMyNum()throwsException{
myNum
=newArrayList<List<Integer>>();
introw=0;
while(row<25){
List
<Integer>tmpvector=newArrayList<Integer>();
tmpvector.add(row);
myNum.add(tmpvector);
row
++;
}
}
//initializeEveryDataTabletotheFront-------------------------------------publicvoidpopulateDynamicDataTable(){
if(myList!=null&&myList.size()>0){
dynamicDataTable
=newHtmlDataTable();
intcolumns=((List)myList.get(0)).size();
System.out.println(
"DisplayCloumn:"+columns);//
for(inti=0;i<columns;i++){
ValueBindingmyItem
=FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem["+i+"]}");
UIColumncolumn
=newUIColumn();
HtmlOutputTextoutputText
=newHtmlOutputText();
outputText.setValueBinding(
"value",myItem);
outputText.setStyle(
""+tempWidth+"");
column.getChildren().add(outputText);
column.setId(
"col_"+i);//YoushouldsetIDofeverycomponentwhichyoucreateintheBacking-Bean.
dynamicDataTable.getChildren().add(column);
}
}
}
publicvoidpopulateHeaderDataTable(){
if(myHeader!=null&&myHeader.size()>0){
headerDataTable
=newHtmlDataTable();
intcolumns=((List)myHeader.get(0)).size();
FacesContextfacesContext
=FacesContext.getCurrentInstance();
Applicationapplication
=facesContext.getApplication();
for(inti=0;i<columns;i++){
HtmlCommandLinkcommandLink
=(HtmlCommandLink)application.createComponent(HtmlCommandLink.COMPONENT_TYPE);
StringvalueBindingExpression
="#{myHeader["+i+"]}";
ValueBindingvalueBinding
=application.createValueBinding(valueBindingExpression);
commandLink.setValueBinding(
"value",valueBinding);
commandLink.setId(
"head_comankLink_"+i);//Themostimportant!!!Ifyoudontputitnothingisgonnahappen.
commandLink.setStyle(
"color:blue");
commandLink.setStyle(
""+tempWidth+"");
commandLink.getAttributes();
Class[]params
={ActionEvent.class};
MethodBindingactionListener
=application.createMethodBinding("#{myBean.setSelectedDocumentId}",params);
commandLink.setActionListener(actionListener);
commandLink.setImmediate(
true);
UIColumncolumn
=newUIColumn();
column.getChildren().add(commandLink);
column.setId(
"head_"+i);
headerDataTable.getChildren().add(column);
}
}
}
publicvoidpopulateNumDataTable(){
if(myNum!=null&&myNum.size()>0){
numDataTable
=newHtmlDataTable();
UIOutputoutput
=newUIOutput();
ValueBindingmyItem
=FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myNum[0]}");
output.setValueBinding(
"value",myItem);
//Setcolumn.UIColumncolumn=newUIColumn();
column.getChildren().add(output);
column.setId(
"num");
numDataTable.getChildren().add(column);
}
}
//TestActionsandActionListeners--------------------------------------------publicvoidsetSelectedDocumentId(ActionEventevent)throwsException
{
}
//Getters-------------------------------------------------------------------publicHtmlDataTablegetDynamicDataTable()throwsException{
if(dynamicDataTable==null){
loadMyList();
//Reloadtogetmostrecentdata.
populateDynamicDataTable();
}
returndynamicDataTable;
}
publicHtmlDataTablegetHeaderDataTable()throwsException{
if(headerDataTable==null){
loadMyHeader();
//Reloadtogetmostrecentdata.
populateHeaderDataTable();
}
returnheaderDataTable;
}
publicHtmlDataTablegetNumDataTable()throwsException{
if(numDataTable==null){
loadMyNum();
//Reloadtogetmostrecentdata.
populateNumDataTable();
}
returnnumDataTable;
}
publicList<List<Integer>>getMyNum(){
returnmyNum;
}
publicList<List<String>>getMyHeader(){
returnmyHeader;
}
publicList<List<String>>getMyList(){
returnmyList;
}
//Setters-------------------------------------------------------------------publicvoidsetDynamicDataTable(HtmlDataTabledynamicDataTable){
this.dynamicDataTable=dynamicDataTable;
}
publicvoidsetHeaderDataTable(HtmlDataTableheaderDataTable){
this.headerDataTable=headerDataTable;
}
publicvoidsetMyHeader(List<List<String>>myHeader){
this.myHeader=myHeader;
}
publicvoidsetNumDataTable(HtmlDataTablenumDataTable){
this.numDataTable=numDataTable;
}
publicvoidsetMyNum(List<List<Integer>>myNum){
this.myNum=myNum;
}
publicvoidsetMyList(List<List<String>>myList){
this.myList=myList;
}
}

faces-config.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEfaces-configPUBLIC"-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.1//EN""http://java.sun.com/dtd/web-facesconfig_1_1.dtd"><faces-config><managed-bean><managed-bean-name>myBean</managed-bean-name><managed-bean-class>mypackage.MyBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean></faces-config>

styles.css

.orders{
border
:thinsolidblack;}
.ordersHeader
{
text-align
:center;
font-style
:;
color
:Snow;
font-size
:12px;
background
:Teal;}
.evenColumn
{
text-align
:center;
font-size
:12px;
background
:#F0FFFF;}
.oddColumn
{
text-align
:center;
font-size
:12px;
background
:white;}

转自:http://blog.csdn.net/wsfeiyuan/archive/2008/11/19/3332694.aspx

免责声明:文章转载自《JSF: 动态生成的DataTable, 固定表头, 固定行标》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇图片转二进制的两种方式Elasticsearch之深入理解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring Boot集成thymeleaf异步刷新页面

 现在比较流行前后端分离开发,但在有些业务场景下模板引擎也用的不少。本文介绍thymeleaf页面的局部更新,Spring Boot采用的是2.0.4,先来看代码。 IndexController.java: package com.example.demo.thymeleaf; import org.springframework.stereoty...

Shiro快速入门

写在前面:   最近项目中使用了Shiro,虽然不是自己在负责这一块,但还是抽空学习了下,也可以让自己对shiro有基本的了解。毕竟Shiro安全框架在项目中还是挺常用的。   对于Apache Shiro的基本概念就不在这里一一描述了,资料网上都有,主要还是记录下代码相关的,能够先让自己快速学会使用。   这里的demo(可以测试登录认证,登出,以及授权...

C#综合揭秘——细说多线程(上)

引言   本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。   其中委托的BeginInvoke方法以及回调函数最为常用。   而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作。特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax...

【python 3.6】从网站抓图并存放到本地路径

#!/usr/bin/python # -*- coding: UTF-8 -*- _author_ = 'BH8ANK' import urllib.request import re import os import time #os.rmdir("D:/images") #1,打开页面,读取图片张数,抓html wangzhi = "https...

在线HTML编辑器使用入门(Kindeditor)

 官网: http://kindeditor.net/demo.php   解压,开发中只需要导入选中的文件(通常在 webapp 下,建立 editor 文件夹 )    在使用 kindeditor 页面 导入   <!--导入在线HTML编辑器 --> <script type="text/javascript" sr...

MongoDB查询报错:class com.mongodb.MongoSecurityException: Exception authenticating MongoCredential

异常日志: 2019-05-30 10:10:24,252 [http-nio-8080-exec-1] DEBUG [java.sql.Connection] -ooo Connection Opened 2019-05-30 10:10:24,258 [http-nio-8080-exec-1] DEBUG [java.sql.PreparedSta...