2013-02-14 128 views
4

如何在Struts 2中爲客戶端顯示和Hibernate實現分頁作爲持久層。如何在Struts 2中實現分頁

這裏是我迄今所做的代碼:

<display:table id="students" name="students" pagesize="2" 
    export="false" requestURI="/student"> 
    <display:column property="studentRoll" title="Roll" 
     paramId="studentRoll" sortable="true" /> 
    <display:column property="studentName" title="Name" sortable="true" /> 
    <display:column property="studentCourse" title="Course" 
     sortable="true" /> 
    <display:setProperty name="paging.banner.placement" value="bottom" /> 
</display:table> 

有什麼辦法來實現這一點沒有display標籤?

+0

更好地描述結果你是怎麼做的。 – 2013-02-14 11:42:32

回答

3

有一種實現方法,我會給你一些建議。也許這不是你正在尋找,但與顯示標籤,我真的懷疑你可以實現一些不關心說這個字。顯示標記是一個庫,用於簡化網絡上表格數據的表示,並且已經足夠老化,可以像Ajax和基於組件的腳本庫(如jQuery等)一樣使用現代技術。即使我已經看到顯示標記已被渲染,但我看到這只不過是增加了有問題的架構的複雜性。這裏需要添加它屬於基於屬性的顯示標籤庫的性質。它的創建目的是爲了簡化當時的使用或開發過程。現在人們不會將自己侷限於習俗和醜陋的解決方案。

現在看代碼,如果我可以說這是一個代碼,該標籤表示行和列的表,給定可能使用標籤,標題,其他HTML屬性自定義它們,即使使用CSS,但是這已經超出這個問題。

屬性名稱表示一個變量,其數據結構表示一個表格數據。它可能是一個列表或一組對象無關緊要。什麼是它可以迭代,並有行和列。

屬性pagesize指向每個頁面的記錄數。

給定的URI甚至不記得從服務器提供數據或僅用於轉義。

並且在標籤的結尾附近是橫幅放置,用屬性設置。所以你甚至不需要用它來實現任何代碼,只需設置定製屬性即可。

現在,以表示該表在Struts2的數據有一個

<s:iterator var="row" begin="0" value="#request.navigator.list"> 

標籤,列表students或別的東西並不重要。導航器是與顯示標籤中的橫幅相似的對象,但不是此處的組件。帶按鈕的組件導航器將在稍後描述。

在迭代器中可以有任何表示行的內容。但是,這不可能。

導航器作爲組件可以被賦予不同的方式簡單地例如

<s:property value="#request.navigator.bar" escapeHtml="false"/> 

然後在列表中的數據是從通過SQL或者HQL或條件API不要緊數據庫中提取。這是分兩步完成的。首先檢查希望返回的記錄總數。它提供了在最後移動並且不超過頁面大小的可能性。然後返回需要在頁面上表示的有限行數。這些都是在顯示錶格的操作中完成的。工作行爲需要兩個參數,第一行和頁面大小。如果更改了記錄總數,則還需要更正導航器。

這就是我想回答如何實現頁面導航邏輯。我試圖不寫許多許多代碼,因爲它沒有問題。

+0

好的,謝謝你的詳細解釋。但我不能申請CSS來顯示tag.can你請指定任何解決方案來做到這一點。 – edaklij 2013-02-15 06:00:42

+0

這可能是另一個答案,現在你可以看看[this](http://stackoverflow.com/questions/14464701/how-can-i-adjust-the-position-of-last-prev-next-最後鏈接功能於struts2-0-DISP/14466668#14466668)。 – 2013-02-15 09:00:50

0

我會建議你使用jQuery Datatable,你需要完成下列操作:

<table id="datatable"> 
    <tbody> 
    <s:iterator> 
     <tr><td><s:property/></td></tr> 
    </s:iterator> 
    </tbody> 
</table> 
<script> 
    $("#datatable").dataTable(); 
</script> 

也有像struts2-jquery-plugin

其他選項這取決於你的需求。

1

您將需要或多或少複製顯示方式。

  1. 你需要建立一個頁面選擇,爲此,你需要得到 數總項目 - 見 Criteria.setProjection(Projections.rowCount)。
  2. 您需要在頁面上提供 鏈接,以允許用戶將所選頁面發送到該操作。
  3. 在你的動作就可以使用選擇的頁面 數量和頁面大小來確定偏移和 多項成果,見Critera.setFirstResult和 Criteria.setMaxResults
  4. 你會然後讀取這些行,並創建 行豆的集合。
  5. 在您的JSP中迭代bean並使用< s:iterator \ >構建表。

看起來,使用displaytag可能會更容易,請參閱其PaginatedList接口,它將允許您在Hibernate中進行分頁,並讓displaytag完成所有艱苦的工作。

+0

好的,謝謝你的replay.but我不能申請CSS顯示tag.can你請指定任何解決方案來做到這一點。 – edaklij 2013-02-15 05:55:33