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

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

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

    隨筆-348  評論-598  文章-0  trackbacks-0
    頁面:
    <f:view>
            
    <h:form id="formlist">    
                
    <rich:dataTable id="carList" width="483" columnClasses="col" rows="10"
                    value
    ="#{testBean.dataModel}" var="car">            
                    
    <f:facet name="header">
                        
    <rich:columnGroup>
                            
    <h:column>
                                
    <h:outputText styleClass="headerText" value="Name" />
                            
    </h:column>
                            
    <h:column>
                                
    <h:outputText styleClass="headerText" value="Decription" />
                            
    </h:column>
                            
    <h:column>
                                
    <h:outputText styleClass="headerText" value="Base Price" />
                            
    </h:column>
                            
    <h:column>
                                
    <h:outputText styleClass="headerText" value="Time" />
                            
    </h:column>
                            
    <h:column>
                                
    <h:outputText styleClass="headerText" value="操作" />
                            
    </h:column>                        
                        
    </rich:columnGroup>
                    
    </f:facet>
        
                    
    <h:column>
                        
    <h:outputText value="#{car.name}" />
                    
    </h:column>
                    
    <h:column>
                        
    <h:outputText value="#{car.description}" />
                    
    </h:column>
                    
    <h:column>
                        
    <h:outputText value="#{car.baseprice}" />
                    
    </h:column>
                    
    <h:column>
                        
    <h:outputText value="#{car.timestamp}" />
                    
    </h:column>
                    
    <h:column>
                        
    <h:commandLink action="#{user.delete}" value="刪除" >
                            
    <f:param name="id" value="#{car.id}"/>
                        
    </h:commandLink>
                    
    </h:column>                
                
    </rich:dataTable>
                
    <rich:datascroller for="carList" id="dc1"
                style
    ="width:483px" page="#{user.scrollerPage}"/>                        
            
    </h:form>
        
    </f:view>
    DataPage.java:
    package com.jsecode.util.pagination;

    import java.util.List;

    public class DataPage
    {

        
    /**
         * 將需要的頁的數據封裝到一個DataPage中去, 這個類表示了我們需要的一頁的數據,<br>
         * 里面包含有三個元素:datasetSize,startRow,和一個用于表示具體數據的List。<br>
         * datasetSize表示了這個記錄集的總條數,查詢數據的時候,使用同樣的條件取count即可,<br>
         * startRow表示該頁的起始行在數據庫中所有記錄集中的位置
         
    */


        
    private int datasetSize;

        
    private int startRow;

        
    private List data;

        
    /**
         * 
         * 
    @param datasetSize
         *            數據集大小
         * 
    @param startRow
         *            起始行
         * 
    @param data
         *            數據list
         
    */

        
    public DataPage(int datasetSize, int startRow, List data)
        
    {

            
    this.datasetSize = datasetSize;

            
    this.startRow = startRow;

            
    this.data = data;

        }


        
    /**
         * 
         * 
    @return
         
    */

        
    public int getDatasetSize()
        
    {

            
    return datasetSize;

        }


        
    public int getStartRow()
        
    {

            
    return startRow;

        }


        
    /**
         * 
         * 
    @return 已填充好的數據集
         
    */

        
    public List getData()
        
    {

            
    return data;

        }


    }

    PagedListDataModel.java:
    package com.jsecode.util.pagination;

    import javax.faces.model.DataModel;

    public abstract class PagedListDataModel extends DataModel {
        
    int pageSize;
        
    int rowIndex;
        DataPage page;

        
    /**
         * Create a datamodel that pages through the data showing the specified
         * number of rows on each page.
         
    */

        
    public PagedListDataModel(int pageSize) {
            
    super();
            
    this.pageSize = pageSize;
            
    this.rowIndex = -1;
            
    this.page = null;
        }


        
    /**
         * Not used in this class; data is fetched via a callback to the fetchData
         * method rather than by explicitly assigning a list.
         
    */

        
    public void setWrappedData(Object o) {
            
    if (o instanceof DataPage) {
                
    this.page = (DataPage) o;
            }
     else {
                
    throw new UnsupportedOperationException(" setWrappedData ");
            }

        }


        
    public int getRowIndex() {
            
    return rowIndex;
        }


        
    /**
         * Specify what the "current row" within the dataset is. Note that the
         * UIData component will repeatedly call this method followed by getRowData
         * to obtain the objects to render in the table.
         
    */

        
    public void setRowIndex(int index) {
            rowIndex 
    = index;
        }


        
    /**
         * Return the total number of rows of data available (not just the number of
         * rows in the current page!).
         
    */

        
    public int getRowCount() {
            
    return getPage().getDatasetSize();
        }


        
    /**
         * Return a DataPage object; if one is not currently available then fetch
         * one. Note that this doesn't ensure that the datapage returned includes
         * the current rowIndex row; see getRowData.
         
    */

        
    private DataPage getPage() {
            
    if (page != null{
                
    return page;
            }

            
    int rowIndex = getRowIndex();
            
    int startRow = rowIndex;
            
    if (rowIndex == -1{
                
    // even when no row is selected, we still need a page
                
    // object so that we know the amount of data available.
                startRow = 0;
            }
     // invoke method on enclosing class
            page = fetchPage(startRow, pageSize);
            
    return page;
        }


        
    /**
         * Return the object corresponding to the current rowIndex. If the DataPage
         * object currently cached doesn't include that index then fetchPage is
         * called to retrieve the appropriate page.
         
    */

        
    public Object getRowData() {
            
    if (rowIndex < 0{
                
    throw new IllegalArgumentException(
                        
    " Invalid rowIndex for PagedListDataModel; not within page ");
            }
     // ensure page exists; if rowIndex is beyond dataset size, then
            
    // we should still get back a DataPage object with the dataset size
            
    // in it
            if (page == null{
                page 
    = fetchPage(rowIndex, pageSize);
            }

            
    int datasetSize = page.getDatasetSize();
            
    int startRow = page.getStartRow();
            
    int nRows = page.getData().size();
            
    int endRow = startRow + nRows;
            
    if (rowIndex >= datasetSize) {
                
    throw new IllegalArgumentException(" Invalid rowIndex ");
            }

            
    if (rowIndex < startRow) {
                page 
    = fetchPage(rowIndex, pageSize);
                startRow 
    = page.getStartRow();
            }
     else if (rowIndex >= endRow) {
                page 
    = fetchPage(rowIndex, pageSize);
                startRow 
    = page.getStartRow();
            }

            
    return page.getData().get(rowIndex - startRow);
        }


        
    public Object getWrappedData() {
            
    return page.getData();
        }


        
    /**
         * Return true if the rowIndex value is currently set to a value that
         * matches some element in the dataset. Note that it may match a row that is
         * not in the currently cached DataPage; if so then when getRowData is
         * called the required DataPage will be fetched by calling fetchData.
         
    */

        
    public boolean isRowAvailable() {
            DataPage page 
    = getPage();
            
    if (page == null{
                
    return false;
            }

            
    int rowIndex = getRowIndex();
            
    if (rowIndex < 0{
                
    return false;
            }
     else if (rowIndex >= page.getDatasetSize()) {
                
    return false;
            }
     else {
                
    return true;
            }

        }


        
    /**
         * Method which must be implemented in cooperation with the managed bean
         * class to fetch data on demand.
         
    */

        
    public abstract DataPage fetchPage(int startRow, int pageSize);

        
    /**
         * 添加了刷新模塊
         
    */

        
    public void reflash() {
            
    if (this.page != null{
                
    this.page = null;
                getPage();
            }

        }

    }


    TestBean.java:被datatable調用的類
    public class TestBean
    {
        
    //不同的分頁需求需要添加不同的dataModel,并實現不同的getDataModel
        
    //例如,需要獲得有名稱條件的分頁可以定義dataModelName,和getDataModelName()實現
        private DataModel dataModel;

        
    public DataModel getDataModel()
        
    {

            
    if ( dataModel == null ) {
                dataModel 
    = new PagedListDataModel(10)
                
    {
                    
    /**
                     * 用不同的條件獲得數據集和數量
                     
    */

                    
    public DataPage fetchPage(int startRow, int pageSize)
                    
    {
                        
    // call enclosing managed bean method to fetch the data
                        CarBeanDAO dao = new CarBeanDAO();
                        String sql 
    = "from CarBean model order by model.id desc";                
                        Query query 
    = EntityManagerHelper.createQuery(sql);                    
                        query.setFirstResult(startRow);                    
                        query.setMaxResults(pageSize);                    
                        List list 
    = query.getResultList();
                        System.out.println(
    "current row count = " + list.size());
                        Query q 
    = EntityManagerHelper.createQuery("select count(*) from CarBean");
                        
    return new DataPage(Integer.parseInt(q.getSingleResult().toString()), startRow, list);
                    }

                }
    ;
            }

            
            
    return dataModel;

        }

    }
    配置文件:
     <managed-bean>
      
    <managed-bean-name>testBean</managed-bean-name>
      
    <managed-bean-class>com.jsecode.util.pagination.TestBean</managed-bean-class>
      
    <managed-bean-scope>session</managed-bean-scope>
     
    </managed-bean> 

    有人反映會出現獲取兩次DataModel的情況,為什么呢?
    經過我的測試,是因為設置的datatable的rows屬性的值大于了程序中pageSize的值,比如你設置rows="12",而你的pageSize設置的是10,那么JSF為了滿足顯示12條得條件,就會取兩次數據集組成一個12跳得數據集顯示出來。


    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2008-10-29 16:52 TiGERTiAN 閱讀(2723) 評論(1)  編輯  收藏 所屬分類: JavaJSF

    評論:
    # re: RichFaces中使用datatable和datascroller進行分頁(使用數據庫分頁,改良版)(含源碼)(JSF 1.2,RichFaces 3.2.1GA) 2008-10-30 16:34 | 韓現龍未登錄
    太好了!正在找這個,感謝樓主。
    我由原來的C#陣營轉到了java,還希望樓主能夠多多指教!
    加我MSN:hanxianlong@hotmail.com  回復  更多評論
      
    主站蜘蛛池模板: 好吊色永久免费视频大全| 亚洲视频免费一区| 亚洲美免无码中文字幕在线| 69成人免费视频| 男男gay做爽爽免费视频| 亚洲av永久无码制服河南实里| 免费无码一区二区三区| 亚洲精品无码日韩国产不卡av| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲国产成人久久综合一| 天天摸天天操免费播放小视频| 杨幂最新免费特级毛片| 亚洲免费视频观看| 久久久久亚洲av成人无码电影| 在线天堂免费观看.WWW| 两个人www免费高清视频| 亚洲精华国产精华精华液网站| 国产亚洲精品无码成人| 在线观看亚洲免费| 2021在线观看视频精品免费| 一级毛片a免费播放王色电影 | 日韩亚洲综合精品国产| 久久亚洲国产成人精品性色| 又黄又大又爽免费视频| 曰曰鲁夜夜免费播放视频 | 在线人成免费视频69国产| 成a人片亚洲日本久久| 亚洲日本国产乱码va在线观看| 亚洲日本va午夜中文字幕久久| 最新欧洲大片免费在线| 免费人成黄页在线观看日本| 日本免费精品一区二区三区| 中文字幕 亚洲 有码 在线| 亚洲五月激情综合图片区| 中文字幕精品无码亚洲字| 国产小视频免费观看| 女性无套免费网站在线看| 国产精品久久久久久久久免费| 久久免费线看线看| 在线免费观看伊人三级电影| 无遮挡呻吟娇喘视频免费播放|