<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    征服jsf

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      6 隨筆 :: 0 文章 :: 27 評論 :: 0 Trackbacks
            ‘jsf的dataTable組件自定義控制指定行樣式的方法’  這篇文章我主要通過覆寫DataModel對象的getRowData()方法來控制DataTable每一行的行為,其實還有個標(biāo)準(zhǔn)的方式,也更加優(yōu)雅,那就是使用DataModelListener,典型的監(jiān)聽事件,jsf內(nèi)置了數(shù)據(jù)模型監(jiān)聽機(jī)制以便開發(fā)者對于數(shù)據(jù)模型每一行的控制,而且這種監(jiān)聽可以無限增加,使得對每一行控制的方式變成一個個監(jiān)聽對象,非常好用,下面就是更改過得樣例:
         
    package net.blogjava.fangshun.book;

    import java.util.List;

    import javax.faces.context.FacesContext;
    import javax.faces.el.VariableResolver;
    import javax.faces.model.DataModelEvent;
    import javax.faces.model.DataModelListener;
    import javax.faces.model.ListDataModel;

    import org.apache.myfaces.component.html.ext.HtmlDataTable;

    /**
     * 集成了ListDataModel為Book模型提供自定義樣式的支持
     * 
    @author shun.fang
     *
     
    */

    public class BookListDataModel extends ListDataModel {
        
        
    public BookListDataModel(List<Book> books) {
            
    super(books);
            
    super.addDataModelListener(new BookListDataModelListener());
        }

        
        
    /**
         * 覆寫了DataModel對象的getRowData方法,每次uiData組件從模型列表獲取新一行記錄
         * 的時候,是從這里發(fā)起的,所以在這里可以通過獲取uiData組件,來對uiData組件的狀態(tài)進(jìn)行
         * 調(diào)整。目前的調(diào)整就是根據(jù)業(yè)務(wù)的需要對uiData組件的每一行樣式進(jìn)行特殊指定。
         
    */

    //    @Override
    //    public Object getRowData() {
    //        // TODO Auto-generated method stub
    //        
    //        /////////////////////////////////////////////////////////////
    //        //通過變量解析獲取request scope中的BookList列表模型
    //        FacesContext facesContext = FacesContext.getCurrentInstance();
    //        VariableResolver vr = facesContext.getApplication().getVariableResolver();
    //        BookList bookList = (BookList)vr.resolveVariable(facesContext, "booking");    
    //        /////////////////////////////////////////////////////////////
    //        
    //        //間接得到綁定BookList列表模型的uiData組件,并向下轉(zhuǎn)型成HtmlDataTable(myfaces擴(kuò)展類型)組件
    //        HtmlDataTable table = (HtmlDataTable)bookList.getUiData();
    //        
    //        //獲取當(dāng)前行的Book實例
    //        Book book = (Book)super.getRowData();
    //        
    //        //根據(jù)當(dāng)前行Book實例的業(yè)務(wù)特征為HtmlDataTable組件設(shè)置渲染行樣式
    //        setCurrentRowStyle(table, book.getType());
    //        
    //        return book;
    //    }
        
        
    /**
         * 根據(jù)不同的類型,設(shè)置當(dāng)前行的樣式
         * 
    @param table
         * 
    @param type
         
    */

        
    private void setCurrentRowStyle(HtmlDataTable table, int type) {
            
    switch (type) {
                
    case Book.COMPUTER_BOOK:
                    
    //System.out.println("computers");
                    table.setRowStyleClass("computers");    //設(shè)置計算機(jī)書籍樣式
                    break;
                
    case Book.ART_BOOK:
                    
    //System.out.println("arts");
                    table.setRowStyleClass("arts");        //設(shè)置文學(xué)書籍樣式
                    break;
                
    case Book.ECONOMY_BOOK:
                    
    //System.out.println("C");
                    table.setRowStyleClass("economy");        //設(shè)置經(jīng)濟(jì)書籍樣式
                    break;
                
    default:
                    
    break;
            }

        }

        
        
    class BookListDataModelListener implements DataModelListener {

            
    public void rowSelected(DataModelEvent event) {
                
    // TODO Auto-generated method stub
                
                
    /////////////////////////////////////////////////////////////
                
    //通過變量解析獲取request scope中的BookList列表模型
                FacesContext facesContext = FacesContext.getCurrentInstance();
                VariableResolver vr 
    = facesContext.getApplication().getVariableResolver();
                BookList bookList 
    = (BookList)vr.resolveVariable(facesContext, "booking");    
                
    /////////////////////////////////////////////////////////////
                
                
    //間接得到綁定BookList列表模型的uiData組件,并向下轉(zhuǎn)型成HtmlDataTable(myfaces擴(kuò)展類型)組件
                HtmlDataTable table = (HtmlDataTable)bookList.getUiData();
                
                
    //獲取當(dāng)前行的Book實例
                Book book = (Book)event.getRowData();
                
    if(book != null{
                    
    //根據(jù)當(dāng)前行Book實例的業(yè)務(wù)特征為HtmlDataTable組件設(shè)置渲染行樣式
                    setCurrentRowStyle(table, book.getType());
                }

            }

            
        }

    }

     我把監(jiān)聽器BookListDataModelListener作為我的自定義模型的一個內(nèi)部類來增強(qiáng)業(yè)務(wù)聚合性,大家在使用的時候可以直接使用一些標(biāo)準(zhǔn)的DataModel,例如ListDataModel等,可以為每個監(jiān)聽器新建一個對象,然后在jsf業(yè)務(wù)層去實例化調(diào)用,不一定要向樣例那樣放在一起。但是一定要記住,event.getRowData()可能有空值(最后一行的終結(jié)處),所以要向樣例那樣,進(jìn)行非空判斷!

     

    posted on 2007-09-21 16:28 方順 閱讀(1923) 評論(2)  編輯  收藏 所屬分類: jsf

    評論

    # re: 使用DataModelListener對‘jsf的dataTable組件自定義控制指定行樣式的方法 ’的改進(jìn) 2007-09-21 17:17 千里冰封
    呵呵,樓主的名字很有氣勢,以后要學(xué)JSF,就來這里了  回復(fù)  更多評論
      

    # re: 使用DataModelListener對‘jsf的dataTable組件自定義控制指定行樣式的方法 ’的改進(jìn)[未登錄] 2008-05-17 12:36 steve
    你好
    我想問你一個Datatable的問題
    我想一個list多列顯示
    本來是:
    1
    2
    3
    4
    顯示成:
    1 2
    3 4
    怎么搞
    謝謝  回復(fù)  更多評論
      

    主站蜘蛛池模板: 四虎在线免费播放| 国产在线观看免费观看不卡 | 久久国产免费一区| 国产精品亚洲精品日韩已方| 日本在线观看免费高清| 黄网站免费在线观看| 中文字幕精品无码亚洲字 | 日韩成人在线免费视频| 亚洲欧美不卡高清在线| 四虎在线免费播放| 免费看黄网站在线看| 亚洲成av人片不卡无码久久| 一级做a爰片久久毛片免费陪 | 精品熟女少妇aⅴ免费久久| 亚洲人成网站18禁止一区| 亚洲AV一二三区成人影片| 无码人妻一区二区三区免费| 亚洲ts人妖网站| 免费观看的av毛片的网站| 免费的黄色网页在线免费观看| 伊人久久大香线蕉亚洲| 亚洲av色香蕉一区二区三区 | 国产专区一va亚洲v天堂| 精品国产一区二区三区免费| 中文字幕亚洲精品资源网| 在线观看免费大黄网站| 免费精品国自产拍在线播放| 亚洲2022国产成人精品无码区| 日本三级2019在线观看免费| 亚洲av无码一区二区三区四区| 亚洲综合亚洲综合网成人| 久久久久免费看黄a级试看| 精品亚洲AV无码一区二区| 亚洲国产综合无码一区二区二三区 | a级毛片免费网站| 中文字幕亚洲综合久久| 国产免费午夜a无码v视频| 成全动漫视频在线观看免费高清版下载 | 日日躁狠狠躁狠狠爱免费视频| 日韩亚洲欧洲在线com91tv| 成av免费大片黄在线观看|