5

クライアント側の表示用に Struts 2 でページングを実装し、永続化レイヤーとして Hibernate を実装するにはどうすればよいですか。

これまでに行ったコードは次のとおりです。

<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タグなしでこれを実装する方法はありますか?

4

3 に答える 3

4

それを実装する方法があり、私はあなたにいくつかの推奨事項を与えます。あなたが探しているのではないかもしれませんが、表示タグを使用すると、その言葉を言っても構わない何かを実装できるかどうかは本当に疑わしいです。表示タグは、Web上の表形式データの表現を簡素化するために作成されたライブラリであり、Ajaxなどの最新テクノロジやjQueryなどのコンポーネントベースのスクリプトライブラリで使用するのに十分な古さです。表示タグがajax化されているのを見たことがありますが、これは、問題のあるアーキテクチャに複雑さを加えるだけのことではありません。プロパティベースの表示タグライブラリの性質をここに追加する必要があります。そして、当時の使用法や開発プロセスを簡素化することを目的として作成されました。今日、人々はカスタムで醜い解決策で自分自身を制限していません。

コードを見ると、それがコードであると言えば、タグは行と列でテーブルを表し、CSSを使用しても、ラベル、ヘッダー、その他のHTML属性でカスタマイズできる可能性がありますが、これは問題外です。

属性名は、表形式のデータを表すデータ構造を持つ変数を表します。リストのリストでも、オブジェクトのセットでもかまいません。反復可能で、行と列がある可能性があるのはどういうことですか。

属性pagesizeは、ページあたりのレコード数を示します。

指定されたURIは、サーバーからデータをフィードするため、または単にエスケープするために何であるかを覚えていません。

タグの終わり近くには、プロパティで設定されたバナー配置があります。したがって、カスタマイズ用のプロパティを設定するだけで、コードを実装する必要はありません。

ここで、Struts2のデータでテーブルを表すために、

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

タグ、リストはstudents、または他の何かは重要ではありません。ナビゲーターは、表示タグのバナーに似たオブジェクトですが、ここではコンポーネントではありません。後で説明するボタンを備えたコンポーネントナビゲーター。

イテレータ内には、行を表すコンテンツが含まれている場合があります。しかし、これは問題外です。

コンポーネントとしてのナビゲーターには、たとえば、さまざまな方法を指定できます。

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

次に、リスト内のデータがSQL、HQL、またはCriteriaAPIを介してデータベースからフェッチされます。これは2つのステップで行われます。まず、返却したいレコードの総数を確認しました。これにより、最後に移動してページサイズを超えないようにすることができます。次に、ページ上で表すために必要な限られた数の行を返します。これらはすべて、テーブルを表示するアクションで実行されます。動作するアクションには、最初の行とページサイズの2つのパラメーターが必要です。これは、レコードの総数が変更された場合にナビゲーターを修正するためにも必要です。

それが、ページナビゲーションロジックの実装方法について私が答えたかったことです。疑問の余地なく、多くのコードを書かないようにしました。

于 2013-02-14T14:23:40.607 に答える
1

ディスプレイがこれを行う方法を多かれ少なかれコピーする必要があります。

  1. ページ セレクターを作成する必要があります。これには、アイテムの総数を取得する必要があります。Criteria.setProjection(Projections.rowCount) を参照してください。
  2. ユーザーが選択したページをアクションに送信できるように、ページにリンクを提供する必要があります。
  3. アクションでは、選択したページ番号とページ サイズを使用してオフセットと結果の数を決定できます。 Critera.setFirstResult と Criteria.setMaxResults を参照してください。
  4. 次に、これらの行を読み取り、行 Bean のコレクションを作成します。
  5. JSP で Bean を反復処理し、<s:iterator\> を使用してテーブルを構築します。

displaytag を使用する方が簡単なように思われます。その PaginatedList インターフェースを参照してください。これにより、Hibernate でページ分割し、displaytag にすべての難しい作業を任せることができます。

于 2013-02-14T11:52:57.823 に答える
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のような他のオプションもあります

それはあなたのニーズに依存します。

于 2013-02-14T11:46:36.330 に答える