|
Spring Boot+Datatablesを使用した開発手順
Datatablesを使うための設定には、実際にはSpring BootやThymeleafと連携する個所はほぼありません。
複数の手順を踏んで設定する必要があるので一見大変そうですが、
純粋にHTMLとJavaScriptとCSSの世界で完結しているので、一つずつやれば難しくはありません。
[1] CDNの参照
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/2.1.2/css/dataTables.dataTables.min.css"/>
<script type="text/javascript" src="https://cdn.datatables.net/2.1.2/js/dataTables.min.js"></script>
<!-- テーブルの選択機能を持たせるには以下のSELECT拡張が必要 -->
<link rel="stylesheet" href="https://cdn.datatables.net/select/2.0.3/css/select.dataTables.min.css"/>
<script src="https://cdn.datatables.net/select/2.0.3/js/dataTables.select.min.js"></script>
|
DataTablesを使うにはjQueryも必須です。
またDataTablesのSELECT拡張という、テーブルをクリックすると反応するJavaScript処理を記述できる拡張もあります。
これらは全てCDNで読み込み可能です。
なお、Datatablesではヘッダ行を固定してデータ行を縦スクロールまたはページ渡りで表示する機能は内蔵され、
デフォルトで有効になっていますが、一部の列を固定して他の列を横スクロールするには、
FixedColumnsという拡張機能が必要になります。
それを試した例はこちらに記載しています。
[2] Datatablesの作成
<script>
jQuery(function($){
var table1 = $("#table1").DataTable({
"displayLength": 10,
"select" : true,
"language": {"url" : "https://cdn.datatables.net/plug-ins/3cfcc339e89/i18n/Japanese.json"},
});
// ★この後ろの部分に後述の処理を適宜追加します。
});
</script>
|
対象のTABLE要素、ここでは#table1に対して、DataTable()で初期化すればDatatablesが有効になります。
引数にはDatatablesの様々な動作に関する設定が渡せます。
"select"はSELECT拡張を有効にする設定、"language"は日本語で表示する設定にしています。
[3] テーブルの外観の調整
CSSを使って普通に記述すればOKです。
ここはDatatablesに直接関係しない見栄えの調整なので、特に言う事はないでしょう。
<style>
/* 行の高さを縮める */
#table1 thead td{
padding-top: 1px;
padding-bottom: 1px;
}
#table1 tbody td{
padding-top: 1px;
padding-bottom: 1px;
}
/* 行の背景色 */
#table1 thead tr {
background-color: #CCCCCC;
}
#table1 tbody tr:nth-child(odd) {
background-color: #FFFFFF;
}
#table1 tbody tr:nth-child(even) {
background-color: #EEEEEE;
}
/* 枠線 */
#table1 thead td:first-child {
border-top: 1px solid #404040;
border-left: 1px solid #404040;
}
#table1 thead td{
border-top: 1px solid #404040;
border-right: 1px solid #404040;
}
#table1 tbody td:first-child {
border-left: 1px solid #404040;
border-bottom: 1px solid #404040;
}
#table1 tbody td {
border-right: 1px solid #404040;
border-bottom: 1px solid #404040;
}
</style>
|
[4] テーブルの記述
TABLE要素の記述です。ここも大きな注意点はありませんが、colspan、rowspanは避けた方が良いようです。
またthead、tbodyは省略せずに書いた方が良いと思います。
<table id="table1" class="table table-bordered">
<thead>
<tr>
<th>支店コード</th>
<th>支店名称</th>
<th>地域</th>
<th>地域名称</th>
<th>所在地</th>
<th>従業員数</th>
</tr>
</thead>
<tbody>
<tr th:each="e: ${shitenList}">
<td th:text="${e.shitenCode}"></td>
<td th:text="${e.shitenName}"></td>
<td th:text="${e.areaCode}"></td>
<td th:text="${e.areaName}"></td>
<td th:text="${e.address}"></td>
<td th:text="${e.employeeNum}"></td>
</tr>
</tbody>
</table>
|
[5] テーブルの行をクリックした際の動作を記述する
TABLE要素 #table1 のTR要素がクリックされたときのJavaScript処理を次のように記述する中で、
クリックされた行の情報をこのように取り出せます。
取り出して何をするんです?
例えばこの例のように「選択行の値を編集フォームの各入力欄にコピーする」などの処理が考えられます。
// テーブルの行をクリックしたときの処理⇒編集フォームに値をコピーします。
$("#table1").on('click', 'tbody tr', function (e) {
var rowdata = table1.row($(this)).data();
//alert("Selected:[" + rowdata + ']');
// 支店コードはrowdata[0]で取得できる
var f = document.getElementById("editForm");
f.shitenCode.value = rowdata[0];
f.shitenName.value = rowdata[1];
f.areaCode.value = rowdata[2];
// ...
});
|
[6] ボタンイベントなどの中でテーブルの選択行を参照する
テーブルと同じページにあるボタンなどを押した際のJavaScriptで、テーブルの選択行の値を参照できます。
何に使うんです?以下の例では「選択行を削除」(#deletebutton1)というボタンがクリックされた際の処理を記述しており、
選択行のキー項目であるshitenCodeを削除コール用隠しフォーム deleteForm の shitenCodeプロパティにコピー後、
同フォームをSubmitしています。
document.querySelector('#deletebutton1').addEventListener('click', function () {
var rows = table1.rows('.selected').data();
if(rows.length === 0){
alert("レコードが選択されていません。");
} else {
var shitenCode = rows[0][0];
var shitenName = rows[0][1];
if(confirm(shitenCode + "(" + shitenName + ")を削除します。よろしいですか?")){
var f = document.getElementById("deleteForm");
f.shitenCode.value = shitenCode;
f.submit();
}
}
});
|

(first uploaded 2024/08/04 last updated 2025/01/04, URANO398)
|