html完成

This commit is contained in:
2026-10-23 09:53:44 +09:00
parent adae4c5de5
commit 0682e588a7
9 changed files with 453 additions and 444 deletions

View File

@@ -1,77 +1,77 @@
package com.example.demo.controller; //package com.example.demo.controller;
//
import java.util.logging.Logger; //import java.util.logging.Logger;
//
import jakarta.servlet.http.HttpSession; //import jakarta.servlet.http.HttpSession;
//
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; //import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; //import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; //import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping; //import org.springframework.web.bind.annotation.PostMapping;
//
import com.example.demo.form.LoginInfoForm; //import com.example.demo.form.LoginInfoForm;
import com.example.demo.form.LoginUserForm; //import com.example.demo.form.LoginUserForm;
import com.example.demo.form.MessageForm; //import com.example.demo.form.MessageForm;
import com.example.demo.service.impl.Login; //import com.example.demo.service.impl.Login;
//
@Controller //@Controller
public class LoginController { //public class LoginController {
//
// // ログ出力用インスタンス // // // ログ出力用インスタンス
private static final Logger LOGGER = Logger.getLogger(LoginController.class.getName()); // private static final Logger LOGGER = Logger.getLogger(LoginController.class.getName());
//
// ログイン処理を行う // // ログイン処理を行う
private final Login login; // private final Login login;
//
// コンストラクタで部品を注入する(Autowired) // // コンストラクタで部品を注入する(Autowired)
@Autowired // @Autowired
public LoginController(Login login) { // public LoginController(Login login) {
this.login = login; // this.login = login;
} // }
//
// 画面で使うフォームの初期化 // // 画面で使うフォームの初期化
@ModelAttribute // @ModelAttribute
public LoginUserForm loginUserForm() { // public LoginUserForm loginUserForm() {
return new LoginUserForm(); // return new LoginUserForm();
} // }
//
// ログインボタンが押されたときの処理 // // ログインボタンが押されたときの処理
@PostMapping("/doLogin") // @PostMapping("/doLogin")
public String doLogin(LoginInfoForm loginInfoForm, HttpSession session, Model model) { // public String doLogin(LoginInfoForm loginInfoForm, HttpSession session, Model model) {
//
try { // try {
// 入力チェック(メールアドレスやパスワードの形が正しいか) // // 入力チェック(メールアドレスやパスワードの形が正しいか)
if (!LoginUserForm.checkParameter(loginInfoForm)) { // if (!LoginUserForm.checkParameter(loginInfoForm)) {
// エラーメッセージと、入力されたデータを画面に返す // // エラーメッセージと、入力されたデータを画面に返す
model.addAttribute("messageError", new MessageForm("メールアドレス、パスワードの入力内容に誤りがあります")); // model.addAttribute("messageError", new MessageForm("メールアドレス、パスワードの入力内容に誤りがあります"));
model.addAttribute("loginInfoForm", loginInfoForm); // model.addAttribute("loginInfoForm", loginInfoForm);
return "login"; // login.html を表示 // return "login"; // login.html を表示
} // }
//
// 認証チェック(IDとパスワードが一致するか) // // 認証チェック(IDとパスワードが一致するか)
if (!login.canLogin(loginInfoForm)) { // if (!login.canLogin(loginInfoForm)) {
// 間違っている場合のメッセージを画面に返す // // 間違っている場合のメッセージを画面に返す
model.addAttribute("messageError", new MessageForm("IDまたはパスワードが間違っています")); // model.addAttribute("messageError", new MessageForm("IDまたはパスワードが間違っています"));
model.addAttribute("loginInfoForm", loginInfoForm); // model.addAttribute("loginInfoForm", loginInfoForm);
return "login"; // login.html を表示 // return "login"; // login.html を表示
} // }
//
// ログイン処理の実行 // // ログイン処理の実行
LoginUser loginUser = login.doLogin(loginInfoForm); // LoginUser loginUser = login.doLogin(loginInfoForm);
//
// セッション(サーバーの秘密のメモ帳)にユーザー情報を保存 // // セッション(サーバーの秘密のメモ帳)にユーザー情報を保存
//「ログイン中」の状態 // //「ログイン中」の状態
session.setAttribute("loginUser", LoginUserForm.convertFrom(loginUser)); // session.setAttribute("loginUser", LoginUserForm.convertFrom(loginUser));
//
// 成功したらメニュー画面へ進む // // 成功したらメニュー画面へ進む
return "menu"; // menu.html を表示 // return "menu"; // menu.html を表示
//
} catch (Exception e) { // } catch (Exception e) {
// 予期せぬエラーが起きたら、セッションを消してエラー画面へ // // 予期せぬエラーが起きたら、セッションを消してエラー画面へ
session.invalidate(); // session.invalidate();
LOGGER.error("エラーが発生しました!", e); // LOGGER.error("エラーが発生しました!", e);
return "error"; // error.html を表示 // return "error"; // error.html を表示
} // }
} // }
} //}

View File

@@ -1,64 +1,64 @@
package com.example.demo.controller; //package com.example.demo.controller;
//
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; //import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
//
import java.util.logging.Level; //import java.util.logging.Level;
import java.util.logging.Logger; //import java.util.logging.Logger;
//
import jakarta.servlet.http.HttpSession; //import jakarta.servlet.http.HttpSession;
//
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; //import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; //import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; //import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; //import org.springframework.web.bind.annotation.RequestMethod;
//
import com.example.rhizome.aop.aspect.PermissionCheck; //import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; //import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; //import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; //import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.LoginUserForm; //import com.example.rhizome.app.presentation.form.LoginUserForm;
//
@Controller //@Controller
public class LogoutController { //public class LogoutController {
// ログ出力用インスタンス // // ログ出力用インスタンス
private final static Logger LOGGER = Logger.getLogger(LogoutController.class.getName()); // private final static Logger LOGGER = Logger.getLogger(LogoutController.class.getName());
// エラーメッセージ用の定数フィールド // // エラーメッセージ用の定数フィールド
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; // private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
//
HttpSession httpSession; // HttpSession httpSession;
//
@Autowired // @Autowired
public LogoutController(HttpSession httpSession) { // public LogoutController(HttpSession httpSession) {
this.httpSession = httpSession; // this.httpSession = httpSession;
} // }
//
@ModelAttribute // @ModelAttribute
public LoginUserForm loginUserForm() { // public LoginUserForm loginUserForm() {
return new LoginUserForm(); // return new LoginUserForm();
} // }
//
@PermissionCheck // @PermissionCheck
@SessionCheck // @SessionCheck
@RequestMapping(value = LOGOUT, method = RequestMethod.POST) // @RequestMapping(value = LOGOUT, method = RequestMethod.POST)
public String doLogout(Model model) { // public String doLogout(Model model) {
try { // try {
// セッション情報の破棄 // // セッション情報の破棄
httpSession.invalidate(); // httpSession.invalidate();
//
// ログイン画面に遷移するための情報を設定 // // ログイン画面に遷移するための情報を設定
model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginUserForm()); // model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginUserForm());
// login.html に遷移 // // login.html に遷移
return TransitionTargetPageNameKeyword.LOGIN_HTML; // return TransitionTargetPageNameKeyword.LOGIN_HTML;
//
} catch (Exception e) { // } catch (Exception e) {
//
// エラーログ出力 // // エラーログ出力
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); // LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
// エラーページに遷移 // // エラーページに遷移
return TransitionTargetPageNameKeyword.ERROR_HTML; // return TransitionTargetPageNameKeyword.ERROR_HTML;
} // }
//
} // }
} //}

View File

@@ -1,5 +1,4 @@
/*package com.example.demo.controller; package com.example.demo.controller;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
@@ -16,9 +15,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import com.example.demo.entity.Book_collectionEntity; import com.example.demo.entity.Book_collectionEntity;
import com.example.demo.form.SearchConditionBookForm; import com.example.demo.form.SearchConditionBookForm;
import com.example.demo.service.SearchBook; import com.example.demo.service.ReturnService;
@Controller @Controller
public class SelectBookController { public class SelectBookController {
@@ -29,50 +26,48 @@ public class SelectBookController {
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
HttpSession httpsession; HttpSession httpsession;
SearchBook searchBook; ReturnService returnService;
@Autowired @Autowired
public SelectBookController(HttpSession httpSession, SearchBook searchBook) { public SelectBookController(HttpSession httpSession, ReturnService returnService) {
this.httpsession = httpSession; this.httpsession = httpSession;
this.searchBook = searchBook; this.returnService = returnService;
} }
//空の検索条件Form //空の検索条件Form
@ModelAttribute @ModelAttribute("bookSearchForm")
public SearchConditionBookForm searchConditionBookForm() { public SearchConditionBookForm searchConditionBookForm() {
return new SearchConditionBookForm(); return new SearchConditionBookForm();
} }
// ① 書籍一覧の初期表示 // ① 書籍一覧の初期表示
@RequestMapping(value ="/selectBook", method = RequestMethod.POST) @RequestMapping(value ="/selectBook", method = RequestMethod.GET)
public String select(Model model) { public String selectBook(Model model) {
try { try {
//貸出可能な書籍を全権取得する // LoginUser loginUser = (LoginUser) httpsession.getAttribute("loginUser");
List<Book_collectionEntity> books = searchBook.selectAll(); //
//検索結果をmodelに登録する
model.addAttribute("books" , books);
//!!ここに管理者か一般ユーザか判断・でボタンを表示するための処理が必要
// 一旦コメントアウト
// LoginUser loginUser = httpSession.getAttribute("loginUser");
// //ログイン情報が存在しない場合はログイン画面へ // //ログイン情報が存在しない場合はログイン画面へ
// if(LoginUser == null) { // if(loginUser == null) {
// return "/login"; // return "/login";
// } // }
// //LoginUserのisAdminUser()を呼び出す // //貸出可能な書籍を全て取得
// //管理者ならtrue、一般社員ならfalse List<Book_collectionEntity> books = returnService.availableSelectAll();
// boolean isAdmin = loginUser.isAdminUser();
// //判定結果をModelに格納あうる
// //HTMLでは"{isAdmin}"として使用
// model.addAttribute("isAdmin",isAdmin);
// // Sessionからログイン者情報を取得する
//取得した書籍情報をModelに登録する
model.addAttribute("books" , books);
//
// //管理者か一般ユーザかを判定
// boolean isAdmin = loginUser.isAdminUser();
//
// //判定結果をModelに登録する
// model.addAttribute("isAdmin" , isAdmin);
//書籍一覧画面へ遷移
return "bookList"; return "bookList";
}catch(Exception e) { } catch(Exception e) {
//httpSessionを破棄 //httpSessionを破棄
httpsession.invalidate(); httpsession.invalidate();
//エラー内容を出力 //エラー内容を出力
@@ -86,29 +81,22 @@ public class SelectBookController {
// ② 検索ボタン押下時の処理 // ② 検索ボタン押下時の処理
@RequestMapping(value ="/selectBook", method = RequestMethod.GET) @RequestMapping(value = "/selectBook", method = RequestMethod.POST)
public String select(SearchConditionBookForm searchConditionBookForm, Model model) { public String select(@ModelAttribute("bookSearchForm") SearchConditionBookForm searchConditionBookForm, Model model) {
try { try {
List<Book_collectionEntity> books = searchBook.searchByWithLike(searchConditionBookForm); // LoginUser loginUser = (LoginUser) httpsession.getAttribute("loginUser");
model.addAttribute("books", books); //
// // //ログイン情報が存在しない場合はログイン画面へ
//!!ここに管理者か一般ユーザか判断・でボタンを表示するための処理が必要? // if(loginUser == null) {
//
// 一旦コメントアウト
// LoginUser loginUser = httpSession.getAttribute("loginUser");
// if(LoginUser == null) {
// return "/login"; // return "/login";
// } // }
// //LoginUserのisAdminUser()を呼び出す //
// //管理者ならtrue、一般社員ならfalse List<Book_collectionEntity> books = returnService.searchByWithLike(searchConditionBookForm);
model.addAttribute("books" , books);
// boolean isAdmin = loginUser.isAdminUser(); // boolean isAdmin = loginUser.isAdminUser();
// //判定結果をModelに格納あうる // model.addAttribute("isAdmin" , isAdmin);
// //HTMLでは"{isAdmin}"として使用
// model.addAttribute("isAdmin",isAdmin);
return "bookList"; return "bookList";
} catch (Exception e) { } catch (Exception e) {
//httpSessionを破棄 //httpSessionを破棄
httpsession.invalidate(); httpsession.invalidate();
@@ -121,7 +109,30 @@ public class SelectBookController {
} }
} }
} }
*/
// //書籍一覧画面へ遷移
// model.addAttribute("isAdmin", isAdmin);
//return "bookList";
////貸出可能な書籍を全権取得する
////List<Book_collectionEntity> books = returnService.availableSelectAll();
////検索結果をmodelに登録する
//model.addAttribute("books" , books);
//
//!!ここに管理者か一般ユーザか判断・でボタンを表示するための処理が必要
////一旦コメントアウト
//LoginUser loginUser = (LoginUser)httpSession.getAttribute("loginUser");
//
//
////LoginUserのisAdminUser()を呼び出す
//////管理者ならtrue、一般社員ならfalse
//boolean isAdmin = loginUser.isAdminUser();
//////判定結果をModelに格納あうる
//////HTMLでは"{isAdmin}"として使用
//model.addAttribute("isAdmin",isAdmin);
////// Sessionからログイン者情報を取得する
//

View File

@@ -1,96 +1,96 @@
package com.example.demo.form; //package com.example.demo.form;
//
import com.example.rhizome.app.domain.model.LoginUser; //import com.example.rhizome.app.domain.model.LoginUser;
//
import lombok.AllArgsConstructor; //import lombok.AllArgsConstructor;
import lombok.Data; //import lombok.Data;
import lombok.NoArgsConstructor; //import lombok.NoArgsConstructor;
//
//ログインをする人 ////ログインをする人
@Data //@Data
@AllArgsConstructor //@AllArgsConstructor
@NoArgsConstructor //@NoArgsConstructor
public class LoginUserForm { //public class LoginUserForm {
/** // /**
* 社員ID // * 社員ID
*/ // */
private Integer idEmployee; // private Integer idEmployee;
/** // /**
* 社員名 // * 社員名
*/ // */
private String nmEmployee; // private String nmEmployee;
/** // /**
* 社員名よみ // * 社員名よみ
*/ // */
private String knEmployee; // private String knEmployee;
/** // /**
* メールアドレス // * メールアドレス
*/ // */
private String mailAddress; // private String mailAddress;
/** // /**
* パスワード // * パスワード
*/ // */
private String password; // private String password;
//
/** // /**
* 管理者フラグ // * 管理者フラグ
*/ // */
private Integer flgadmin; // private Integer flgadmin;
//
/** // /**
* business 層の LoginUser クラスから画面用(presentation 層)の LoginUserForm に // * business 層の LoginUser クラスから画面用(presentation 層)の LoginUserForm に
* 変換します。 // * 変換します。
* // *
* @param loginUser business 層の LoginUser インスタンス // * @param loginUser business 層の LoginUser インスタンス
* @return クラスから画面用(presentation 層)の LoginUserForm // * @return クラスから画面用(presentation 層)の LoginUserForm
*/ // */
public static LoginUserForm convertFrom(LoginUser loginUser) { // public static LoginUserForm convertFrom(LoginUser loginUser) {
return new LoginUserForm( // return new LoginUserForm(
loginUser.getIdEmployee(), // loginUser.getIdEmployee(),
loginUser.getNmEmployee(), // loginUser.getNmEmployee(),
loginUser.getKnEmployee(), // loginUser.getKnEmployee(),
loginUser.getMailAddress(), // loginUser.getMailAddress(),
loginUser.getPassword(), // loginUser.getPassword(),
loginUser.getGetFlgadmin() // loginUser.getGetFlgadmin()
); // );
} // }
//
//
public static LoginUserForm convertTo(LoginUser loginUserForm) { // public static LoginUserForm convertTo(LoginUser loginUserForm) {
return new LoginUserForm( // return new LoginUserForm(
loginUserForm.getIdEmployee(), // loginUserForm.getIdEmployee(),
loginUserForm.getNmEmployee(), // loginUserForm.getNmEmployee(),
loginUserForm.getKnEmployee(), // loginUserForm.getKnEmployee(),
loginUserForm.getMailAddress(), // loginUserForm.getMailAddress(),
loginUserForm.getPassword(), // loginUserForm.getPassword(),
loginUserForm.getGetFlgadmin() // loginUserForm.getGetFlgadmin()
); // );
} // }
//
//
public static boolean checkParameter(LoginInfoForm loginInfoForm) { // public static boolean checkParameter(LoginInfoForm loginInfoForm) {
if (null == loginInfoForm.getMailAddress()) { // if (null == loginInfoForm.getMailAddress()) {
return false; // return false;
} // }
//
if (loginInfoForm.getMailAddress().isBlank()) { // if (loginInfoForm.getMailAddress().isBlank()) {
return false; // return false;
} // }
//
if (null == loginInfoForm.getPassword()) { // if (null == loginInfoForm.getPassword()) {
return false; // return false;
} // }
//
return !loginInfoForm.getPassword().isBlank(); // return !loginInfoForm.getPassword().isBlank();
//
} // }
//
/** // /**
* 管理者権限を持っているか確認 // * 管理者権限を持っているか確認
* // *
* @return true:管理者権限を持っている , false:管理者権限を持っていない // * @return true:管理者権限を持っている , false:管理者権限を持っていない
*/ // */
public boolean isAdminUser() { // public boolean isAdminUser() {
return getFlgadmin() == 1; // return getFlgadmin() == 1;
} // }
} //}

View File

@@ -24,5 +24,5 @@ public interface Book_CollectionRepository extends JpaRepository<Book_collection
List<Book_collectionEntity> searchBooks( List<Book_collectionEntity> searchBooks(
@Param("nmBook") String nmBook, @Param("nmBook") String nmBook,
@Param("pubLisher") String pubLisher, @Param("pubLisher") String pubLisher,
@Param(" noteText") String noteText); @Param("noteText") String noteText);
} }

View File

@@ -1,27 +1,27 @@
package com.example.demo.service; //package com.example.demo.service;
//
import javax.transaction.Transactional; //import javax.transaction.Transactional;
//
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; //import org.springframework.stereotype.Service;
//
import com.example.demo.entity.EmployeeEntity; //import com.example.demo.entity.EmployeeEntity;
import com.example.demo.repository.Book_CollectionRepository; //import com.example.demo.repository.Book_CollectionRepository;
import com.example.demo.repository.Borrow_BooksRepository; //import com.example.demo.repository.Borrow_BooksRepository;
//
@Service //@Service
@Transactional //@Transactional
public class LendingListService { //public class LendingListService {
//
@Autowired // @Autowired
private Book_CollectionRepository collection; // private Book_CollectionRepository collection;
@Autowired // @Autowired
private Borrow_BooksRepository borrow; // private Borrow_BooksRepository borrow;
@Autowired // @Autowired
private EmployeeEntity employee; // private EmployeeEntity employee;
//
public List<table> getcollectionWithborrow(){ // public List<table> getcollectionWithborrow(){
return collection; // return collection;
} // }
//
} //}

View File

@@ -1,16 +0,0 @@
package com.example.demo.service;
import java.util.List;
import com.example.demo.entity.Book_collectionEntity;
import com.example.demo.form.SearchConditionBookForm;
public interface SearchBook {
//貸出可能な書籍を全件取得する
List<Book_collectionEntity> selectAll();
//書籍名・出版社・特記事項を条件に検索する
List<Book_collectionEntity> searchByWithLike(SearchConditionBookForm form);
}

View File

@@ -1,11 +1,11 @@
package com.example.demo.service.impl; //package com.example.demo.service.impl;
//
import com.example.demo.form.LoginInfoForm; //import com.example.demo.form.LoginInfoForm;
import com.example.rhizome.app.domain.model.LoginUser; //import com.example.rhizome.app.domain.model.LoginUser;
//
public interface Login { //public interface Login {
LoginUser doLogin(LoginInfoForm loginInfo); // LoginUser doLogin(LoginInfoForm loginInfo);
//
boolean canLogin(LoginInfoForm loginInfo); // boolean canLogin(LoginInfoForm loginInfo);
//
} //}

View File

@@ -7,17 +7,18 @@
</head> </head>
<body> <body>
<!--ログアウトボタン--> <!--ログアウトボタン-->
<a href="@{/logout}">ログアウト</a> <a href="@{/logout}">ログアウト</a>
<h2>書籍一覧・検索</h2>
<!--Controllerと@{/selectBook}合わせる--> <h2>書籍一覧・検索</h2>
<form th:action ="@{/selectBook}" th:object = "${}"method="post"> <!--Controllerと@{/selectBook}合わせる-->
<form th:action="@{/selectBook}" th:object="${bookSearchForm}" method="post">
<table> <table>
<!-- 書籍名--> <!-- 書籍名-->
<tr> <tr>
<th class="header">書籍名</th> <th class="header">書籍名</th>
<td><input type="text" th:field="*{nmBook}"/></td> <td><input type="text" th:field="*{nmBook}" /></td>
</tr> </tr>
<!-- 出版社--> <!-- 出版社-->
<tr> <tr>
@@ -29,13 +30,14 @@
<th class="header">特記事項</th> <th class="header">特記事項</th>
<td><input type="text" th:field="*{noteText}"></td> <td><input type="text" th:field="*{noteText}"></td>
</tr> </tr>
</table>
<!-- 検索ボタン-->
<button type="submit">検索</button> <button type="submit">検索</button>
</form> </form>
<!-- メニュー画面へ戻る--> <!-- メニュー画面へ戻る-->
<a th:href = "@{/menu}">メニューに戻る </a> <a th:href="@{/menu}">メニューに戻る </a>
<h3>検索結果</h3> <h3>検索結果</h3>
<!-- 検索結果一覧--> <!-- 検索結果一覧-->
<table border="1"> <table border="1">
<thead> <thead>
<tr> <tr>
@@ -44,33 +46,45 @@
<th>書籍名よみ</th> <th>書籍名よみ</th>
<th>出版社</th> <th>出版社</th>
<th>特記事項</th> <th>特記事項</th>
<th style="width: 150px;">操作</th"> <th style="width: 150px;">操作</th>
</tr> </tr>
</thead> </thead>
<!-- 検索結果を表示--> <!-- 検索結果を表示-->
<tbody> <tbody>
<!-- booksのデータを1件ずつ取り出す--> <!-- booksのデータを1件ずつ取り出す-->
<tr th:each ="{book : ${books}"> <tr th:each="book : ${books}">
<!--ISBN--> <!--ISBN-->
<td th:each="{book.isbn}"></td> <td th:text="${book.isBn}"></td>
<!--書籍名--> <!--書籍名-->
<td th:each="{book.nmBook}"></td> <td th:text="${book.nmBook}"></td>
<!--書籍名よみ--> <!--書籍名よみ-->
<td th:each="{book.kmBook}"></td> <td th:text="${book.knBook}"></td>
<!--出版社--> <!--出版社-->
<td th:each="{book.pubLisher}"></td> <td th:text="${book.pubLisher}"></td>
<!--特記事項--> <!--特記事項-->
<td th:each="{book.noteText}"></td> <td th:text="${book.noteText}"></td>
<td> <td>
<!-- 管理者の場合は編集ボタン--> <!-- 管理者"flg_admin = 0"の場合は編集ボタン-->
<!--一般ユーザーの場合は> <!-- loginと連携するまでコメントアウト    <form th:if="${isAdmin}" th:action="{@/selectEmployeeInfo}-->
<!-- <form th:action="@{/selectEmployeeInfo}" method = "get">-->
<form th:if = "${isAdmin}" <!-- <input type="hidden" name="idBook" th:value="${book.idBook}">-->
th:action>
<!-- <button type="submit">貸出申請</button>-->
<!-- </form>-->
<!--一般ユーザー"flg_admin = 0"の場合は-->
<!-- loginと連携するまでコメントアウト <form th:if="${isAdmin}" th:action="{@/confirmLending}-->
<form th:action="@{/confirmLending}" method="get">
<input type="hidden" name="idBook" th:value="${book.idBook}">
<button type="submit">貸出申請</button>
</form>
</td> </td>
</table> </table>
</form>
</body> </body>
</html> </html>