自動作成されたControllerを説明する。
例:商品情報管理("/members/admin/shohin/shohin")
controller.admin.ShohinController.java
商品情報詳細表示(mode=detail)
//=======================================================
// 商品情報詳細表示
//=======================================================
/**
* 商品情報詳細表示処理
* 商品情報詳細を表示する処理
*
* @param products products
* @param mode モード
* @param page page
* @param model モデル
* @return 遷移先
*/
・サイドメニューの商品情報一覧(更新削除)をクリックすると、商品情報一覧画面が表示されます。商品情報一覧で、詳細表示対象を選択し、詳細ボタンを押下すると、JavaScriptのsubmitFrm3関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=detail★detail-01により、shohinDetailメソッドにマッピングされます。shohinDetailメソッドは商品情報詳細表示画面を表示します。★detail-03
@PostMapping(params="mode=detail")
・リクエストパラメータproducts(商品CD)、mode、page(ページ番号)を受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
public String shohinDetail(
@RequestParam("products") String products,
@RequestParam("mode") String mode,
@RequestParam("page") String page,
Model model) {
・pageをmodelアトリビュートに設定している。
model.addAttribute("page", page);
Shohin shohin = null;
try {
・DBから商品CDをキーに商品情報を取得し商品Entityに設定する。
//商品情報を取得する
shohin = shohinService.findByPk(products);
if (shohin == null) {
・DB読み込み出来なかったときは、ログを出し、successMessageに削除されているとのメッセージを載せてmodelアトリビュートに設定し、shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
・model:Model
・pageable:PageRequest.ofに、現在のページ番号と1画面の行数を渡して、Pageableオブジェクトを作成している。
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)をセッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。
・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。
log.error("shohin not found:pk products={}", products);
model.addAttribute("successMessage", "『products』=" + products + "は既に削除されています");
Pageable pageable = PageRequest.of(Integer.parseInt(page), pageableDefaultSize);
shohinListBackSub(model, pageable);
return "/members/admin/shohin/shohinList";
}
・DBエレメント(業種、大分類、中分類、小分類)のEntityオブジェクト(BiztypeCdObj、CategoryCdObj、SubcategoryCdObj、ExtracategoryCdObj)は、商品情報EntityのJPAによるリレーション(@NotFound(action=NotFoundAction.IGNORE) 、@ManyToOne、@JoinColumn)で取得している。★detail-02
・取得できないときはオブジェクトがnulllになるので、画面表示の時、NullPointerExceptionが起きないようnewしている。
//大分類、中分類、小分類が見つからなかった場合
if (ObjectUtils.isEmpty(shohin.getBiztypeCdObj())) {
shohin.setBiztypeCdObj(new Biztype());
}
if (ObjectUtils.isEmpty(shohin.getCategoryCdObj())) {
shohin.setCategoryCdObj(new Category());
}
if (ObjectUtils.isEmpty(shohin.getSubcategoryCdObj())) {
shohin.setSubcategoryCdObj(new Subcategory());
}
if (ObjectUtils.isEmpty(shohin.getExtracategoryCdObj())) {
shohin.setExtracategoryCdObj(new Extracategory());
}
} catch(Exception e){
・DB例外発生時はshohinServiceでrollbackされている。例外をキャッチしたら、ログを書いて例外を投げる。画面はシステム共通例外発生画面になる。「システム共通例外発生画面」シート参照
補足:Throwable.Errorは、ここでキャッチせずに、システム共通例外発生画面で処理している。
e.printStackTrace();
e.printStackTrace();
log.error("DBエラーが発生しました", e);
throw e;
}
・商品情報Entityをmodelアトリビュートに設定している。
model.addAttribute("shohin", shohin);
・遷移先として、/resources/templates/members/admin/shohin/shohinDetail.htmlをテンプレートファイルとする。★detail-03
return "/members/admin/shohin/shohinDetail";
}