TERASOLUNAのpaginationタグをBootstrap 3から4へ移行する方法(暫定版)

[TERASOLUNA Server Framework for Java (5.x)が提供しているJSPタグである「pagination」](http://terasolunaorg.github.io/guideline/5.4.1.RELEASE/ja/ArchitectureInDetail/WebApplicationDetail/Pagination.html#pagination-overview-paginationlink)を利用すると、[Bootstrap 3のページネーションコンポーネント](https://getbootstrap.com/docs/3.3/components/#pagination)用のCSSをそのまま利用できたのですが、Bootstrap 4だとそのまま利用することができませんでした（いくつかカスタマイズポイントが用意されているのですが、そのカスタマイズポイントを利用してもちゃんと利用することができなかった・・・）。
ということで・・・本日はTERASOLUNAのpaginationタグをBootstrap 3から4へ移行する方法（暫定対処）を紹介しておきます。

# Bootstrap 3利用時のUI

TERASOLUNAのpaginationタグを利用すると・・・

```jsp
<t:pagination page="${page}" criteriaQuery="${f:query(accountsSearchQuery)}"
              outerElementClass="pagination" />
```

以下のようなページネーションリンクを表示することができました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/8f0227e5-a2e4-3d8e-76f8-136f5c210387.png)


# Bootstrap 4利用時のUI(対策なし)

何もせずにBootstrap 4を適用すると・・・以下のような残念なことになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/85daa632-866a-af82-41f7-11fe9ddb7ca2.png)

# Bootstrap 4のページネーションコンポーネント

[Bootstrap 4のページネーションコンポーネント](https://getbootstrap.com/docs/4.1/components/pagination/)のドキュメントをみて見ると・・・どうやら`page-item`や`page-link`といったクラスを指定しておかないとスタイルが適用されないことがわかりました。

# Bootstrap 4利用時のUI(対策を試みる-その１-)

TERASOLUNAのpaginationタグには動作をカスタマイズするためのオプションが用意されているので、そのオプションを変更することで対応できるか試してみます。

オプションを調べた結果としては・・・`page-item`を指定するためのオプションを見つけられたのですが、`page-link`を指定するためのオプションを見つけることはできませんでした。

```jsp
<t:pagination page="${page}" criteriaQuery="${f:query(accountsSearchQuery)}"
              outerElementClass="pagination" 
              activeClass="page-item active" 
              disabledClass="page-item disabled" />
```

この状態で画面を開くと・・・残念ながら何も変化はありません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/85daa632-866a-af82-41f7-11fe9ddb7ca2.png)

# Bootstrap 4利用時のUI(対策を試みる-その2-)

あとは`page-link`を指定できれば良さそうなので・・・JavaScript(今回はjQuery）を利用してページ表示時にクラスを追加してみることにしてみました。

```js:JavaScriptでpage-linkを追加する方法
$('.pagination a').addClass('page-link');
```

この状態で画面を開くと・・・お〜それっぽいUIになりました:grin:

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/a9825340-9ee1-738c-5446-a504d4de5a00.png)

# Bootstrap 4利用時のUI(対策を試みる-その３-)

見た目上は問題なさげですが・・・ふと開発者ツールでDOMの状態を覗いてみると・・・`page-item`が適用されていないところがありました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/12a0fadc-983b-2219-6e5b-4611a3d1da32.png)

今回はこの部分もJavaScript(今回はjQuery）を利用してページ表示時にクラスを追加してみることにしてみました。

```js:JavaScriptでpage-itemを追加する方法
$('.pagination li').addClass('page-item'); // 追加
$('.pagination a').addClass('page-link');
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/e76432f1-4afa-f280-8b10-19b9648dcf04.png)

`page-item`を追加しても・・・見た目はわかりませんでした:sweat_smile:

![image.png](https://qiita-image-store.s3.amazonaws.com/0/117313/466196d4-118d-4294-6ca8-b8a700182f61.png)

# Bootstrap 4利用時のUI(対策を試みる-その4-)

Bootstrap 3では、現在ページ（アクティブページ）のリンクにマウスのカーソルを合わせた場合は、ハンドポインターにはならず矢印ポインターのままになります。つまり・・・リンクを押すことができない時のUIになるのですが・・・Bootstrap 4ではハンドポインターになってしまいます。TERASOLUNAのpaginationタグのデフォルト動作では、現在ページ（アクティブページ）のリンクは無効化されているため、ハンドポインターではなく矢印ポインターにします。

```css:アクティブページのカーソルを矢印ポインターへ変更する方法
.page-item.active > .page-link {
	cursor: default;
}
```

# まとめ

今回はJavaScript(jQuery)を利用して、（やや無理矢理に・・・:smirk:）Bootstrap 4で解釈できるDOM状態にすることでページネーションコンポーネントのCSSを適用する方法（暫定対処）を紹介しました。この方法はあくまで暫定的な対処だと思っているので・・・[Common libraries for TERASOLUNA Server Framework for Java (5.x)](https://github.com/terasolunaorg/terasoluna-gfw)にIssueを作成して、任意のクラスを指定するためのオプションを用意してもらえるように要望を出してみたいと思います。