科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件JSF动态生成固定表头和行标的DataTable

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这个例子在jsf1.1下通过。JSF 动态生成DataTable, 固定表头, 固定行标, 点击表头可排序, 希望可以供大家学习和参考。

作者:中国IT实验室 来源:中国IT实验室 2007年8月23日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
MyBean.java
package mypackage;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.Application;
import javax.faces.component.UIColumn;
import javax.faces.component.UIOutput;
import javax.faces.component.html.HtmlCommandLink;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
import javax.faces.event.ActionEvent;

public class MyBean {
    
    
private List<List<String>> myList;
    
    
private List<List<String>> myHeader;
    
    
private List<List<Integer>> myNum;
    
    
private HtmlDataTable dynamicDataTable;
    
    
private HtmlDataTable headerDataTable;
    
    
private HtmlDataTable numDataTable;
    
    
private static int tempWidth = 30;

    
// Load Data from DataBase to Every DataTable --------------------------------
    public void loadMyList() throws Exception {

        myList 
= new ArrayList<List<String>>();
        
        
int row = 25;
        
        
while(row > 0) {  
            
            
int column = 25;
            
            String str 
= "o";
            
            List 
<String> tmpvector = new ArrayList <String> ();
            
            
while(column > 0) {
                
                tmpvector.add(str);
                
                column
--;
            }
            row
--;
            
            myList.add(tmpvector);
        }
    }
    
    
public void loadMyHeader() throws Exception {

        myHeader 
= new ArrayList<List<String>>();

        String str 
= "*****";
        
        
int column = 25;
        
        List 
<String> tmpvector = new ArrayList <String> ();
        
        
while(column > 0) {

            tmpvector.add(str);
            
            column
--;
        }
        myHeader.add(tmpvector);
    }
    
    
public void loadMyNum() throws Exception {

        myNum 
= new ArrayList<List<Integer>>();
        
        
int row = 0;
        
        
while(row < 25) {  
                
            List 
<Integer> tmpvector = new ArrayList <Integer> ();

            tmpvector.add(row);
            
            myNum.add(tmpvector);
            
            row
++;
        }
    }
    
    
//initialize Every DataTable to the Front-------------------------------------
    public void populateDynamicDataTable() {

        
if (myList != null && myList.size() > 0) {
            
            dynamicDataTable 
= new HtmlDataTable();
            
            
int columns = ((List) myList.get(0)).size();

            System.out.println(
"DisplayCloumn:   " + columns);//
            
            
for (int i = 0; i < columns; i++) {             

                ValueBinding myItem 
= 
            FacesContext.getCurrentInstance().getApplication().createValueBinding(
"#{myItem[" + i + "]}");              
                
                UIColumn column 
= new UIColumn();
                
                HtmlOutputText outputText 
= new HtmlOutputText();
                
                outputText.setValueBinding(
"value", myItem);

                outputText.setStyle(
"width: " + tempWidth + "");
                
                column.getChildren().add(outputText);
                
              column.setId(
"col_" + i);  //You should set ID of every component which you create in the Backing-Bean .
                
                dynamicDataTable.getChildren().add(column);
            }
        }
    }
    
    
public void populateHeaderDataTable() {
        
        
if (myHeader != null && myHeader.size() > 0) {
            
            headerDataTable 
= new HtmlDataTable();
            
            
int columns = ((List) myHeader.get(0)).size();    
            
            FacesContext facesContext 
= FacesContext.getCurrentInstance();
            
            Application application 
= facesContext.getApplication();
            
            
for (int i = 0; i < columns; i++) {
            
                HtmlCommandLink commandLink 
=
                
 (HtmlCommandLink) application.createComponent(HtmlCommandLink.COMPONENT_TYPE);
                
                String valueBindingExpression 
= "#{myHeader[" + i + "]}";                    
                ValueBinding valueBinding 
= application.createValueBinding(valueBindingExpression);                 
                commandLink.setValueBinding(
"value", valueBinding);        
                
   commandLink.setId(
"head_comankLink_" + i);//The most important!!! If you dont put it nothing is gonna happen.
 

                
                commandLink.setStyle(
"color: blue");
                
                commandLink.setStyle(
"width: " + tempWidth + "");        
                
                commandLink.getAttributes();

                Class[] params 
= { ActionEvent.class };                
                MethodBinding actionListener 
= 
                  application.createMethodBinding(
"#{myBean.setSelectedDocumentId}", params);                
                commandLink.setActionListener(actionListener);

                commandLink.setImmediate(
true); 

                UIColumn column 
= new UIColumn();                
                column.getChildren().add(commandLink);
                column.setId(
"head_" + i);

                headerDataTable.getChildren().add(column);       
            }
        }
    }
    
    
public void populateNumDataTable() {
        
        
if (myNum != null && myNum.size() > 0) {
            
            numDataTable 
= new HtmlDataTable();

            UIOutput output 
= new UIOutput();
            
            ValueBinding myItem 
=
             
 FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myNum[0]}");
            
            output.setValueBinding(
"value", myItem);
            
            
// Set column.
            UIColumn column = new UIColumn();
            column.getChildren().add(output);
            column.setId(
"num");
            
            numDataTable.getChildren().add(column);
        }
    }
   
    
//Test Actions and ActionListeners--------------------------------------------

    
public void setSelectedDocumentId(ActionEvent event) throws Exception 
    {

    }

    
// Getters -------------------------------------------------------------------
    public HtmlDataTable getDynamicDataTable() throws Exception {
        
if (dynamicDataTable == null) {
            
            loadMyList(); 
// Reload to get most recent data.
            
            populateDynamicDataTable();
        }
        
return dynamicDataTable;
    }
    
    
public HtmlDataTable getHeaderDataTable() throws Exception {
        
if (headerDataTable == null) {
            
            loadMyHeader(); 
// Reload to get most recent data.
            
            populateHeaderDataTable();
        }
        
return headerDataTable;
    }

    
public HtmlDataTable getNumDataTable() throws Exception {
        
if (numDataTable == null) {
            
            loadMyNum(); 
// Reload to get most recent data.
            
            populateNumDataTable();
        }
        
return numDataTable;
    }
    
    
public List<List<Integer>> getMyNum() {
        
return myNum;
    }
    
    
public List<List<String>> getMyHeader() {
        
return myHeader;
    }
    
    
public List<List<String>> getMyList() {
        
return myList;
    }

    
// Setters -------------------------------------------------------------------
    public void setDynamicDataTable(HtmlDataTable dynamicDataTable) {
        
this.dynamicDataTable = dynamicDataTable;
    }

    
public void setHeaderDataTable(HtmlDataTable headerDataTable) {
        
this.headerDataTable = headerDataTable;
    }

    
public void setMyHeader(List<List<String>> myHeader) {
        
this.myHeader = myHeader;
    }
    
    
public void setNumDataTable(HtmlDataTable numDataTable) {
        
this.numDataTable = numDataTable;
    }
    
    
public void setMyNum(List<List<Integer>> myNum) {
        
this.myNum = myNum;
    }

    
public void setMyList(List<List<String>> myList) {
        
this.myList = myList;
    }
}
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章