6

JSP ページにページネーションを実装しようとしています。Spring MVC と Hibernate を使用しています。Java コードの部分は問題ありませんが、JSP ページに実装するのに苦労しています。Twitterのブートストラップを使用しています。

これが私が今までやったことです:

<div class="container">
    <table class="table table-hover">
        <th>First Name</th>
        <th>Last Name</th>
        <th>Age</th>
        <c:forEach items="${employees}" var="emp">
        <tr>
            <td>${emp.firstName}</td>
            <td>${emp.lastName}</td>
            <td>${emp.Age}</td>
        </tr>
        </c:forEach>
    </table>

    <div class="pagination">
        <ul>
            <li class="disabled"><a href="#">First</a></li>
            <li class="disabled"><a href="#">Prev</a></li>
            <li class="active"><a href="#">1</a></li>
            <li class="active"><a href="#">2</a></li>
            <li class="active"><a href="#">3</a></li>
            <li class="active"><a href="#">4</a></li>
            <li class="active"><a href="#">5</a></li>
            <li class="active"><a href="#">Next</a></li>
            <li class="active"><a href="#">Last</a></li>
        </ul>
    </div>
</div>

これは私のコントローラーの関連コードです:

@RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getEmployees(ModelMap model) {
            **//I believe I should get the page number from the JSP here but how?**
        model.addAttribute("employees", this.employeeService.getEmployees(page));
        return "listing";
}

これは、私の Service クラスの関連コードです。

public List<Employee> getEmployees(int page) {
        return employeeDao.getEmployeeList(page);
}

これは、私の DAO クラスの関連コードです。

private static final int limitResultsPerPage = 3;

public List<Employee> getEmployeeList(int page) {
        Query q = sessionFactory.getCurrentSession().createQuery(
                "from Employee");
        q.setFirstResult(page * limitResultsPerPage); 
        q.setMaxResults(limitResultsPerPage);
        return (List<Employee>) q.list();
}

そのテーブルを表示しているページは list.jsp です

これが私が何をすべきかについての私の仮定ですが、方法がわかりません(間違った方法をとっている場合は修正してください):

メニューの list.jsp を指すリンクを list.jsp?page=0 に変更して、ユーザーがリンクをクリックするたびに最初のページに到達するようにします。

ユーザーがボタンの 1 つをクリックすると、クエリで適切な「従業員」を返すことができるように、ページ番号をコントローラーに渡す必要があります。

ご覧のとおり、現在最初のページにいるため、最初のボタンと前のボタンは無効になっています。私の質問は、これらのボタンのアクティブ化/非アクティブ化、および次と最後のボタンをどのように処理すればよいですか?

また、リストの数字を「更新」する方法は? たとえば、ユーザーが 20 ページにいる場合、1 から 19 までのボタンは表示されませんか?

4

3 に答える 3

6

少なくともあなたの質問の1つに答えるには:

次のように、RequestParamアノテーションを使用して、ページ番号とその他のパラメーターをJSPからコントローラーに渡すことができます。

  @RequestMapping(value = "/list", method = RequestMethod.GET)
  public String getEmployees(@RequestParam(value = "page", required = false) Long page, ModelMap model) {
        //now page is available.
    model.addAttribute("employees", this.employeeService.getEmployees(page));
    return "listing";
  }

そして、あなたのリンクは次のようになります:

  list/?page=1

ページ付けはかなり複雑なプロセスですが、ここにいくつかのアイデアがあります。JSPページでJSTLを使用して、ロジックを実装できます。例えば:

    <c:if test="${page > 1}">
       <li class="active"><a href="#">First</a></li>
    </c:if>

アクションで、表示するページ数を計算することをお勧めします。たとえば、常に10個のリンクを表示したいとします。1ページ目には1〜10ページを表示し、7ページ目には2〜12ページを表示します。アクションでは、表示する開始ページと終了ページを決定できます。

      int startpage = page - 5 > 0?page - 5:1;
      int endpage = startpage + 10;

JSPページでは、次のようなループを実行できます。

    <c:forEach begin="${startpage}" end="${endpage}" var="p">
         <a href="#">${p}</a>
    </c:forEach>

等々。

于 2013-01-14T03:11:19.487 に答える
0

Vincent Ramdhanie のソリューションは正しいです。ありがとうございます。Dukable: Vincent Ramdhanie のソリューションに基づいてこのコードを使用しましたが、非常にうまく機能します。このようなものがコードで機能するはずです。

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getEmployees(@RequestParam(value = "page", required = false) Long page, ModelMap model) {
    //now page is available.

    int startpage = (int) (page - 5 > 0?page - 5:1);
    int endpage = startpage + 10;

    model.addAttribute("employees", this.employeeService.getEmployees(page));

    model.addAttribute("startpage",startpage);
    model.addAttribute("endpage",endpage);

    return "listing";
}

そしてあなたのjspで:

<div class="pagination">
    <ul>
        <li><c:forEach begin="${startpage}" end="${endpage}" var="p"><a href="<c:url value="/list" ><c:param name="page" value="${p}"/>${p}</c:url>">${p}</a></c:forEach></li>
    </ul>
</div>

次の方法で jsp にアクセスできます。

http://localhost:8080/Project/list/?page=1
于 2016-01-04T21:43:12.990 に答える