Chapter 27

Controller(情報リスト及び、一覧更新、一覧削除) 

kazpgm
kazpgm
2022.01.05に更新

自動作成されたControllerを説明する。

例:商品情報管理("/members/admin/shohin/shohin")

controller.admin.ShohinController.java

商品情報リスト一覧初期表示(mode=list)

    //=======================================================
    // 商品情報リスト及び、一覧更新、一覧削除
    //=======================================================
    /**
     * 商品情報リスト検索条件表示処理
     * 商品情報リスト検索条件を表示する処理
     *
     * @param shohinSrchForm 商品情報リスト検索条件
     * @param srchOrderForm 商品情報リスト昇順降順条件
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先
     */

・サイドメニューの商品情報一覧(更新削除)をクリックすると、JavaScriptのsubmitFrm5関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=list★list-01により、shohinListメソッドにマッピングされます。shohinListメソッドは商品情報一覧画面を初期表示します。★list-02
・検索条件はshohinSrchFormにセットされる。
・タイトル行ソート順はsrchOrderFormにセットされる。

    @PostMapping(params="mode=list")
    public String shohinList(ShohinSrchForm shohinSrchForm,
            SrchOrderForm srchOrderForm,

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。

            @RequestParam("mode") String mode,
            Model model, 
            @PageableDefault(
                                  size=pageableDefaultSize
                              ) 
              Pageable pageable) {

・検索条件に、DBエレメントを使用している場合、以下DBエレメント取得ロジックが自動作成されます。
・商品情報検索条件Formの場合、業種ID、大分類、中分類、小分類のプルダウンがDBエレメントを使用します。

        //DBエレメントを取得する(削除されているものは取得しない)
        LinkedHashMap<String, Map<Object, String>> dbELEMENTS = new LinkedHashMap<String, Map<Object, String>>();
        LinkedHashMap<String, Map<Object, String>> dbELEMENTS1;

・業種情報を対象に、業種マップをDBエレメントに追加するという処理。
・パラメータの意味
 ・getAllFlg=false:非公開は取得しない。なのだけど、公開フラグを持ってないので、公開フラグを選択するロジックはないので、設定値は無視される。
  補足:テーブルに公開フラグがない場合でもgetAllFlgパラメータは存在する。
 ・lrgMapKey="biztypeCd":dbELEMENTSに、キー"biztypeCd"で、業種マップ(キー:業種ID、データ:業種ID + ":" +業種名)を登録する。

        dbELEMENTS1 = dbElementsService.getDbEleAryLrgmidsmlBiztype(false, 
                        "biztypeCd");
        dbELEMENTS.putAll(dbELEMENTS1);

・大分類情報、中分類情報、小分類情報を対象に、大分類が選択されていないときは、大分類マップのみ、大分類が選択されてれば、さらに、中分類マップ、中分類が選択されていればさらに、小分類マップをDBエレメントに追加するという処理。
・パラメータの意味
 ・getAllFlg=false:非公開は取得しない。
  補足:テーブルに公開フラグがない場合でもgetAllFlgパラメータは存在する。
 ・categoryCd=null:設定値に関係なく、大分類情報全データ取得し、大分類マップを作成する。nullはまだ大分類が選択されていないということ。
 ・categoryCdFlg=true:categoryCd値がDBにある時、trueとする。categoryCdFlg=trueかつ、categoryCdがnull以外の時、中分類情報全データ取得し、中分類マップを作成する。
 ・subcategoryCd=null:中分類を設定する。nullはまだ中分類が選択されていないということ。
 ・subcategoryCdFlg=true:中分類がDBにある時、trueとする。subcategoryCdFlg=trueかつ、subcategoryCdがnull以外の時、小分類情報全データ取得し、小分類マップを作成する
 ・lrgMapKey="categoryCd":dbELEMENTSに、キー"categoryCd"で、大分類マップ(キー:大分類、データ:大分類+ ":" +大分類名)を登録する。
 ・midMapKey="subcategoryCd":dbELEMENTSに、キー"subcategoryCd"で、中分類マップ(キー:中分類、データ:中分類+ ":" +中分類名)を登録する。
 ・smlMapKey="extracategoryCd":dbELEMENTSに、キー"extracategoryCd"で、小分類マップ(キー:小分類、データ:小分類+ ":" +小分類名)を登録する。

        dbELEMENTS1 = dbElementsService.getDbEleAryLrgmidsmlCategory(false, null, true, 
                        null, true, 
                        "categoryCd", "subcategoryCd", "extracategoryCd");
        dbELEMENTS.putAll(dbELEMENTS1);
        shohinSrchForm.setDbELEMENTS(dbELEMENTS);

・shohinSrchForm(商品情報検索条件Form)にDBエレメントを設定する。★list-03
・shohinSrchForm(商品情報検索条件Form)をセッションスコープのsessionShohinSrchFormに設定する。
・srchOrderForm(商品情報タイトル行ソート順Form)をセッションスコープのsessionShohinSrchOrderFormに設定する。
・srchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。
 補足:商品情報一覧画面は「更新画面へ切り替え」押下により、更新できるリスト一覧画面にすることができる。
・srchOrderForm(商品情報タイトル行ソート順Form)のソート項目を先頭項目(商品CD)、昇降順を昇順に設定する。

        //セッションに載せる
        this.sessionShohinSrchForm.setShohinSrchForm(shohinSrchForm);
        this.sessionShohinSrchOrderForm.setSrchOrderForm(srchOrderForm);
        //更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");
        srchOrderForm.setSortItemName(sortItemNames[0]);
        srchOrderForm.setSortOrder("A");

・shohinListSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・shohinSrchForm:商品情報検索条件Form
 ・srchOrderForm:商品情報タイトル行ソート順Form
 ・model:Model
 ・pageable:pageableオブジェクト

        shohinListSub(shohinSrchForm, srchOrderForm, model, pageable);

・商品情報検索条件Formをmodelアトリビュートに設定している。
・商品情報タイトル行ソート順Formをmodelアトリビュートに設定している。

        model.addAttribute("shohinSrchForm", shohinSrchForm);
        model.addAttribute("srchOrderForm", srchOrderForm);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。★list-02

        return "/members/admin/shohin/shohinList";
    }

商品情報リスト一覧表示(mode=list_do)

    /**
     * 商品情報リスト一覧表示処理
     * 検索ボタン押下により、商品情報リスト一覧を表示する処理
     * 
     * @param shohinSrchForm 商品情報リスト検索条件
     * @param result チェック結果
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先 
     */

・検索ボタンを押下すると、HTML内の商品情報検索条件formがサブミットされます。
・action:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=list_doにより、shohinListDoメソッドにマッピングされます。shohinListDoメソッドはDBから商品情報を検索し一覧表示します。★list_do-01
・「ShohinSrchForm shohinSrchForm」に(@Validated({GroupOrder1.class, GroupOrder2.class}) をつけているので、ShohinSrchFormのチェックを行います。チェックはまず、Fromクラスに書かれたGroupOrder1.classグループ(必須チェック、桁数チェック)が行われ、OKの時、GroupOrder2.classグループ(属性チェック)が行われます。
・エラーはBindingResultに設定されます。
・商品情報検索条件の画面内容はShohinSrchFormにセットされる。

    @PostMapping(params="mode=list_do")
    public String shohinListDo(@Validated({GroupOrder1.class, GroupOrder2.class}) ShohinSrchForm shohinSrchForm,
            BindingResult result,

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。

            @RequestParam("mode") String mode,
            Model model,
            @PageableDefault(
                      size=pageableDefaultSize
                ) 
          Pageable pageable) {

・検索条件に、DBエレメントを使用している場合、以下DBエレメントチェック結果フラグが自動作成されます。

        boolean biztypeCdFlg = true;
        boolean categoryCdFlg = true;
        boolean subcategoryCdFlg = true;
        boolean extracategoryCdFlg = true;

・srchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。
 補足:商品情報一覧画面は「更新画面へ切り替え」押下により、更新できるリスト一覧画面にすることができる。

        //更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");

・検索条件に、DBエレメントを使用している場合、以下DBエレメントチェックロジックが自動作成されます。
・biztypeをチェックしbiztypeCdFlgを設定。存在しないときはエラーメッセージを設定する。

        //『大分類』がbiztypeテーブルにあればtrue(削除されているものも取得する)
        if (!dbElementsService.isCheckBiztypeCd(shohinSrchForm.getBiztypeCd(), true)) {
            biztypeCdFlg = false;
            result.rejectValue("biztypeCd", "validation.category", new String[] {"『業種id』"}, "");

        }

・categoryをチェックしcategoryCdFlgを設定。存在しないときはエラーメッセージを設定する。

        //『大分類』がcategoryテーブルにあればtrue(削除されているものも取得する)
        if (!dbElementsService.isCheckCategoryCd(shohinSrchForm.getCategoryCd(), true)) {
            categoryCdFlg = false;
            result.rejectValue("categoryCd", "validation.category", new String[] {"『大分類』"}, "");

        }

・subcategoryをチェックしsubcategoryCdFlgを設定。存在しないときはエラーメッセージを設定する。

        //『中分類』がsubcategoryテーブルにあればtrue(削除されているものも取得する)
        if (!dbElementsService.isCheckSubcategoryCd(shohinSrchForm.getCategoryCd(), 
                shohinSrchForm.getSubcategoryCd(), true, categoryCdFlg)) {
            subcategoryCdFlg = false;
            result.rejectValue("subcategoryCd", "validation.category", new String[] {"『中分類』"}, "");            

        }

・extracategoryをチェックしextracategoryCdFlgを設定。存在しないときはエラーメッセージを設定する。

        //『小分類』がextracategoryテーブルにあればtrue(削除されているものも取得する)
        if (!dbElementsService.isCheckExtracategoryCd(shohinSrchForm.getCategoryCd(), 
                shohinSrchForm.getSubcategoryCd(), shohinSrchForm.getExtracategoryCd(), true, subcategoryCdFlg)) {
            extracategoryCdFlg = false;
            result.rejectValue("extracategoryCd", "validation.category", new String[] {"『小分類』"}, "");

        }

・DBエレメントを使用している場合、以下DBエレメント取得ロジックが自動作成されます。
・商品情報Formの場合、業種ID、大分類、中分類、小分類のプルダウンがDBエレメントを使用します。

        //DBエレメントを取得する
        LinkedHashMap<String, Map<Object, String>> dbELEMENTS = new LinkedHashMap<String, Map<Object, String>>();
        LinkedHashMap<String, Map<Object, String>> dbELEMENTS1;

・業種情報を対象に、業種マップをDBエレメントに追加するという処理。
・パラメータの意味
 ・getAllFlg=true:非公開も取得する。なのだけど、公開フラグを持ってないので、公開フラグを選択するロジックはないので、設定値は無視される。
  補足:テーブルに公開フラグがない場合でもgetAllFlgパラメータは存在する。
 ・lrgMapKey="biztypeCd":dbELEMENTSに、キー"biztypeCd"で、業種マップ(キー:業種ID、データ:業種ID + ":" +業種名)を登録する。

        dbELEMENTS1 = dbElementsService.getDbEleAryLrgmidsmlBiztype(true,
                        "biztypeCd");
        dbELEMENTS.putAll(dbELEMENTS1);

・大分類情報、中分類情報、小分類情報を対象に、大分類が選択されていないときは、大分類マップのみ、大分類が選択されてれば、さらに、中分類マップ、中分類が選択されていればさらに、小分類マップをDBエレメントに追加するという処理。
・パラメータの意味
 ・getAllFlg=true:非公開も取得する。
  補足:テーブルに公開フラグがない場合でもgetAllFlgパラメータは存在する。
 ・categoryCd=shohinSrchForm.getCategoryCd():設定値に関係なく、大分類情報全データ取得し、大分類マップを作成する。
 ・categoryCdFlg=先のロジックで設定:categoryCd値がDBにある時、trueとする。categoryCdFlg=trueかつ、categoryCdがnull以外の時、中分類情報全データ取得し、中分類マップを作成する。
 ・subcategoryCd=shohinSrchForm.getSubcategoryCd():中分類を設定する。nullはまだ中分類が選択されていないということ。
 ・subcategoryCdFlg=先のロジックで設定:中分類がDBにある時、trueとする。subcategoryCdFlg=trueかつ、subcategoryCdがnull以外の時、小分類情報全データ取得し、小分類マップを作成する。
 ・lrgMapKey="categoryCd":dbELEMENTSに、キー"categoryCd"で、大分類マップ(キー:大分類、データ:大分類+ ":" +大分類名)を登録する。
 ・midMapKey="subcategoryCd":dbELEMENTSに、キー"subcategoryCd"で、中分類マップ(キー:中分類、データ:中分類+ ":" +中分類名)を登録する。
 ・smlMapKey="extracategoryCd":dbELEMENTSに、キー"extracategoryCd"で、小分類マップ(キー:小分類、データ:小分類+ ":" +小分類名)を登録する。

        dbELEMENTS1 = dbElementsService.getDbEleAryLrgmidsmlCategory(true, shohinSrchForm.getCategoryCd(), categoryCdFlg, 
                        shohinSrchForm.getSubcategoryCd(), subcategoryCdFlg, 
                        "categoryCd", "subcategoryCd", "extracategoryCd");
        dbELEMENTS.putAll(dbELEMENTS1);
        shohinSrchForm.setDbELEMENTS(dbELEMENTS);
        if (result.hasErrors()) {

・エラーの時は、
 ・遷移先として、/resources/templates/members/admin/shohin/shohinList.htmlをテンプレートファイルとする。

            return "/members/admin/shohin/shohinList";
        } else {

・shohinSrchForm(商品情報検索条件Form)をセッションスコープのsessionShohinSrchFormに設定する。
・商品情報検索条件Formをmodelアトリビュートに設定している。
・セッションスコープのsessionShohinSrchOrderFormのsrchOrderForm(商品情報タイトル行ソート順Form)のソート項目を先頭項目(商品CD)、昇降順を昇順に設定する。

            //セッションに載せる
            this.sessionShohinSrchForm.setShohinSrchForm(shohinSrchForm);
            model.addAttribute("shohinSrchForm", shohinSrchForm);
            this.sessionShohinSrchOrderForm.getSrchOrderForm().setSortItemName(sortItemNames[0]);
            this.sessionShohinSrchOrderForm.getSrchOrderForm().setSortOrder("A");
        }

・shohinListSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・this.sessionShohinSrchForm.getShohinSrchForm():商品情報検索条件Form
 ・this.sessionShohinSrchOrderForm.getSrchOrderForm():商品情報タイトル行ソート順Form
 ・model:Model
 ・pageable:pageableオブジェクト

        shohinListSub(this.sessionShohinSrchForm.getShohinSrchForm(), this.sessionShohinSrchOrderForm.getSrchOrderForm(), model, pageable);

・商品情報タイトル行ソート順Formをmodelアトリビュートに設定している。

        model.addAttribute("srchOrderForm", this.sessionShohinSrchOrderForm.getSrchOrderForm());

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。★list_do-02

        return "/members/admin/shohin/shohinList";
    }

商品情報リスト一覧更新処理を、表示処理に切替る処理(mode=lstMode)

    /**
     * 商品情報リスト一覧更新処理を表示処理に切替える
     * 商品情報リスト一覧更新処理を、表示処理に切替る処理
     * 
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先 
     */

・「表示画面へ切替」をクリックすると、JavaScriptのsubmitFrm3関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=lstMode★lstMode-01により、shohinListLstModeメソッドにマッピングされます。shohinListLstModeメソッドは商品情報一覧画面を表示します。★lstMode-02
・入力チェックは行わない。Form入力はない。もちろんDB更新もない。

     @PostMapping(params="mode=lstMode")
    public String shohinListLstMode(

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。例:javascript:submitFrm3('lstMode','',0);の0がpageで、0起算。pageがPageableに取り込まれる。

            @RequestParam("mode") String mode,
            Model model,
            @PageableDefault(
                              size=pageableDefaultSize
                        ) 
            Pageable pageable) {

・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。
 補足:商品情報一覧画面は「更新画面へ切替」押下により、更新できるリスト一覧画面にすることができる。

        //セッションに載せる
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)をセッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

        //商品情報リスト一覧表示サブ処理
        shohinListBackSub(model, pageable);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。

        return "/members/admin/shohin/shohinList";
    }

商品情報リスト一覧表示処理を、更新処理に切替る処理(mode=updMode)

    /**
     * 商品情報リスト一覧表示処理を更新処理に切替える
     * 商品情報リスト一覧表示を、更新処理に切替る処理
     * 
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先 
     */

・「更新画面へ切替」をクリックすると、JavaScriptのsubmitFrm3関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=updMode★updMode-01により、shohinListUpdModeメソッドにマッピングされます。shohinListUpdModeメソッドは商品情報一覧更新画面を表示します。★updMode-02
・入力チェックは行わない。Form入力はない。もちろんDB更新もない。

    @PostMapping(params="mode=updMode")
    public String shohinListUpdMode(

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。例:javascript:submitFrm3('updMode','',0);の0がpageで、0起算。pageがPageableに取り込まれる。

            @RequestParam("mode") String mode,
            Model model, 
            @PageableDefault(
                              size=pageableDefaultSize
                      ) 
            Pageable pageable) {

・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"updMode"(更新リスト更新一覧画面)を設定する。

        //セッションに載せる
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("updMode");

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)をセッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

        //商品情報リスト一覧表示サブ処理
        shohinListBackSub(model, pageable);

・shohinListUpdSubメソッド(商品情報リスト一覧更新サブ処理)を実行する。
・商品情報リスト一覧表示用のデータをもとに、更新するための、ShohinInsUpdListFormを作成し、modelアトリビュートに設定している。
・パラメータの意味
 ・model:Model

        //商品情報リスト一覧更新サブ処理
        shohinListUpdSub(model);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。
・補足:shohinList.htmlはUpdModeにより、"lstMode"は一覧表示、"updMode"は更新一覧表示になります。

        return "/members/admin/shohin/shohinList";
    }

    /**
     * 商品情報リスト一覧更新サブ処理
     * @param model モデル
     */
    private void shohinListUpdSub(Model model) {

・@SuppressWarnings("unchecked")は、「(List<Shohin>)model.getAttribute("shohins");」の未検査キャストワーニングを出さなくするため。

        @SuppressWarnings("unchecked")

・一覧更新するための、ShohinInsUpdListFormをnewし、shohinListBackSubメソッドでセットした"shohins"アトリビュートを、「List<Shohin> shohinList 」とし、shohinFormListを作成し、ShohinInsUpdListFormに設定する。
・shohinList内容を、shohinFormListにBeanUtils.copyPropertiesを使い、同一プロパティ(型名まで同じもの)コピーする。

        List<Shohin> shohinList = (List<Shohin>)model.getAttribute("shohins");
        ShohinInsUpdListForm shohinInsUpdListForm = new ShohinInsUpdListForm();
        List<ShohinForm> shohinFormList = new LinkedList<ShohinForm>();
        shohinInsUpdListForm.setShohinFormList(shohinFormList);
        int i = 0;
        for (Shohin shohin : shohinList) {
            ShohinForm shohinForm = new ShohinForm();
            //同一プロパティ(型名まで同じもの)コピー
            BeanUtils.copyProperties(shohin, shohinForm);

・入力値(業種、大分類、中分類、小分類)をDBエレメントでチェックし、DBエレメント(業種、大分類、中分類、小分類)をShohinFormに追加する。
・補足:パラメータBindingResultを設定していないので、エラーにはならないかつ、パラメータprefixes= "shohinFormList[" + i + "]."は無視される。
・checkAndEditLrgmidsmlForShohinFormメソッドは「Controller(情報登録)」チャプターにある。

            //大分類、中分類、小分類をチェックし、DBエレメントを作成する
            checkAndEditLrgmidsmlForShohinForm(shohinForm, null, "shohinFormList[" + i + "].");
            i++;
            shohinFormList.add(shohinForm);
        }

・一覧更新するための、ShohinInsUpdListFormをmodelアトリビュートに設定している。

        model.addAttribute("shohinInsUpdListForm", shohinInsUpdListForm);
    }

商品情報リスト一覧更新処理(mode=updList_do)

    /**
     * 商品情報一覧更新処理
     *
     * @param shohinInsUpdListForm 商品情報一括登録Form
     * @param result チェック結果
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先
     */

・登録ボタンを押下すると、JavaScriptのdo_UpdListSubmit_Clk関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=updList_doにより、shohinUpdListDoメソッドにマッピングされます。shohinUpdListDoメソッドは商品情報一覧をDBに登録します。★updList_do-01
・「ShohinInsUpdListForm shohinInsUpdListForm」(商品情報一括登録Form)に(@Validated({GroupOrder1.class, GroupOrder2.class}) をつけているので、ShohinInsUpdListFormのチェックを行います。チェックはまず、Fromクラスに書かれたGroupOrder1.classグループ(必須チェック、桁数チェック)が行われ、OKの時、GroupOrder2.classグループ(属性チェック)が行われます。
・エラーはBindingResultに設定されます。
・画面内容はshohinInsUpdListFormにセットされる。

    @PostMapping(params="mode=updList_do")
    public String shohinUpdListDo(@Validated({GroupOrder1.class, GroupOrder2.class}) ShohinInsUpdListForm shohinInsUpdListForm,
            BindingResult result,

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。HIDDENのpageがPageableに取り込まれる。

            @RequestParam("mode") String mode,
            Model model, 
            @PageableDefault(
                              size=pageableDefaultSize
                      ) 
            Pageable pageable) {

・shohinInsUpdListFormの商品情報更新画面内容(shohinForm)リストを処理する。

        List<Shohin> shohinList = new LinkedList<Shohin>();    
        int i = 0;
        for (ShohinForm shohinForm: shohinInsUpdListForm.getShohinFormList()) {

・商品情報更新画面内容(shohinForm)の入力値(業種、大分類、中分類、小分類)をDBエレメントでチェックし、DBエレメント(業種、大分類、中分類、小分類)をShohinFormに追加する。
・補足:パラメータBindingResultを設定している。これによりエラー時はBindingResultにエラーメッセージが設定される。但し、実際には、プルダウンリストから、業種、大分類、中分類、小分類を選択するので、エラーにならない。

            //大分類、中分類、小分類をチェックし、DBエレメントを作成する
            checkAndEditLrgmidsmlForShohinForm(shohinForm, result, "shohinFormList[" + i + "].");
            //主キーをチェックする。
            checkPkForShohinForm("u", shohinForm, result, "shohinFormList[" + i + "].");
            i++;

・画面入力値(商品CD~公開区分)から、商品情報Entityを作成し、商品情報Entityリストを作成する。

            //商品情報に設定する
            Shohin shohin = new Shohin(
                    shohinForm.getProducts(),
                    shohinForm.getProductsname(),
                    shohinForm.getBiztypeCd(),
                    shohinForm.getCategoryCd(),
                    shohinForm.getSubcategoryCd(),
                    shohinForm.getExtracategoryCd(),
                    shohinForm.getOpenkbn1(),
                    null,
                    null,
                    null,null,null,null
                    );
            shohinList.add(shohin);
        }
        if (result.hasErrors()) {

・エラーの時は、
 ・shohinService.setDbEleObjForShohinFormメソッドで、情報一覧更新画面のPKをDbエレメントから取得する場合、DbエレメントObjを設定する。(但し、商品情報の場合、PKをDbエレメントから取得しないので、処理ロジックは空です。)
 ・Pageオブジェクトをmodelアトリビュートに設定している。
 ・セッションshohinSrchFormをmodelアトリビュートに設定している。
 ・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"updMode"(更新リスト更新一覧画面)を設定する。
 ・セッションsrchOrderFormをmodelアトリビュートに設定している。
 ・shohinInsUpdListForm(商品情報一括登録Form)をmodelアトリビュートに設定している。
 ・遷移先として、/resources/templates/members/admin/shohin/shohinList.htmlをテンプレートファイルとする。

            //DbエレメントObj設定
            for (ShohinForm shohinForm: shohinInsUpdListForm.getShohinFormList()) {
                shohinService.setDbEleObjForShohinForm(shohinForm);
            }            
            //Pageオブジェクトをダミーで作成する。(ページオブジェクトを戻す必要があるので)
            Page<Shohin> page = new PageImpl<Shohin> (new ArrayList<Shohin>(), 
                                pageable, pageable.getPageNumber() * pageable.getPageSize());
            model.addAttribute("page", page);
            model.addAttribute("shohinSrchForm", this.sessionShohinSrchForm.getShohinSrchForm());
            //エラーなので、更新するリスト一覧画面にする
            this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("updMode");
            model.addAttribute("srchOrderForm", this.sessionShohinSrchOrderForm.getSrchOrderForm());
            model.addAttribute("shohinInsUpdListForm", shohinInsUpdListForm);
            return "/members/admin/shohin/shohinList";
        }

        try {

・商品情報DBを更新する。
・パラメータの意味
 ・shohinList:画面入力値(商品CD~公開区分)を商品情報Entityリストにしたもの。

            shohinService.updateForShohinInsUpdListForm(shohinList);
        //その他の更新時エラー
        } catch(Exception e) {

・DB例外発生時はshohinServiceでrollbackされている。例外をキャッチしたら、ログを書いて例外を投げる。画面はシステム共通例外発生画面になる。「システム共通例外発生画面」シート参照
・補足:Throwable.Errorは、ここでキャッチせずに、システム共通例外発生画面で処理している。

            e.printStackTrace();
            log.error("DBエラーが発生しました", e);
            throw e;
         }      

・DB更新OK時は、successMessageForListUpd="商品情報リスト更新が完了しました"をmodelアトリビュートに設定している。★updList_do-02
・mode="list_do"(商品情報一覧)をmodelアトリビュートに設定している。
・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。

        model.addAttribute("successMessageForListUpd", "商品情報リスト更新が完了しました");
        //モードを設定
        model.addAttribute("mode", "list_do");
        //更新したので、更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)を、セッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

        //商品情報リスト一覧表示サブ処理
        shohinListBackSub(model, pageable);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。

        return "/members/admin/shohin/shohinList";
    }

商品情報リスト一覧表示(ページリンク押下)処理(mode=list_back)

    /**
     * 商品情報リスト一覧表示処理
     * ページリンク押下により、商品情報リスト一覧を表示する処理
     * 
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先 
     */

・[最初][前ページ]ページ番号[次ページ][最後]をクリックすると、JavaScriptのpaging関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=list_back★list_back-01により、shohinListBackメソッドにマッピングされます。shohinListBackメソッドは指定ページの商品情報一覧画面を表示します。★list_back-02
・入力チェックは行わない。Form入力はない。もちろんDB更新もない。

    @PostMapping(params="mode=list_back")
    public String shohinListBack(

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。例:javascript:paging(1);の1がpageで、0起算。pageがPageableに取り込まれる。

            @RequestParam("mode") String mode,
            Model model, 
            @PageableDefault(
                              size=pageableDefaultSize
                          ) 
            Pageable pageable) {

・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。

        //更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)を、セッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

        shohinListBackSub(model, pageable);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。
・補足:shohinList.htmlはUpdModeにより、"lstMode"は一覧表示、"updMode"は更新一覧表示になります。

        return "/members/admin/shohin/shohinList";
    }

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)。
・mode=detail、upd、del_doのエラー時及び、mode=upd_do、lstMode、updMode、updList_do、list_back、del_doの処理OK時、使用している。

    /**
     * shohinListBackSubメソッド
     *  商品情報リスト一覧表示サブ処理
     *  
     * @param model モデル
     * @param pageable ページ
     */
    private void shohinListBackSub(Model model, Pageable pageable) {

・shohinListSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・this.sessionShohinSrchForm.getShohinSrchForm(),:セッションスコープ・商品情報検索条件Form
 ・this.sessionShohinSrchOrderForm.getSrchOrderForm():セッションスコープ・商品情報タイトル行ソート順Form
 ・model:Model
 ・pageable:pageableオブジェクト

        shohinListSub(this.sessionShohinSrchForm.getShohinSrchForm(), this.sessionShohinSrchOrderForm.getSrchOrderForm(), model, pageable);

・セッションスコープ・商品情報検索条件Formをmodelアトリビュートに設定している。
・セッションスコープ・商品情報タイトル行ソート順Formをmodelアトリビュートに設定している。

        model.addAttribute("shohinSrchForm", this.sessionShohinSrchForm.getShohinSrchForm());
        model.addAttribute("srchOrderForm", this.sessionShohinSrchOrderForm.getSrchOrderForm());
    }

商品情報リスト一覧表示(ソート順押下)処理(mode=list_up_dwn)

    /**
     * 商品情報リスト一覧表示処理
     * テーブル項目リンク押下により、商品情報リスト一覧を表示する処理
     * 
     * @param srchOrderForm 商品情報リスト昇順降順条件
     * @param result チェック結果
     * @param mode モード
     * @param model モデル
     * @param pageable ページ
     * @return 遷移先 
     */

・商品情報タイトル行ソート順(例:業種ID)を押下すると、JavaScriptのsubmitFrm2関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=list_up_dwn★list_up_dwn-01により、shohinListUpDwnメソッドにマッピングされます。
・shohinListUpDwnメソッドは、商品情報一覧をソート順表示します。★list_up_dwn-02
・SrchOrderFormの入力チェックを行う。DB更新はない。
・エラーはBindingResultに設定されます。
・商品情報タイトル行ソート順はsrchOrderFormにセットされる。

    @PostMapping(params="mode=list_up_dwn")
    public String shohinListUpDwn(@Validated SrchOrderForm srchOrderForm,
            BindingResult result,

・リクエストパラメータmodeを受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。画面からはpageも渡ししていないので、pageableは初期値になる。

            @RequestParam("mode") String mode,
            Model model, 
            @PageableDefault(
                              size=pageableDefaultSize
                          ) 
            Pageable pageable) {

・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。

         //更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");

・エラーの時は、エラーメッセージにメッセージプロパティから項目名を編集し、"errorMessageForListUpd"としてmodelアトリビュートに設定する。但し、PGMで設定した内容が渡ってくる(手入力がない)のでエラーにはならない。

        if (result.hasErrors()) {
            String errorMessages = "";
            for (ObjectError error : result.getAllErrors()) {
                errorMessages += messageSource.getMessage(error, Locale.getDefault());
            }
            model.addAttribute("errorMessageForListUpd", errorMessages);

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)を、セッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

            //商品情報リスト一覧表示サブ処理
            shohinListBackSub(model, pageable);

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。

             return "/members/admin/shohin/shohinList";
        } else {

・セッションスコープ・商品情報タイトル行ソート順Formをセッションスコープに設定している。
・入力されたソート順により新たなソート順を求めて設定する。
・セッションスコープ・商品情報タイトル行ソート順Formをmodelアトリビュートに設定している。

            //セッションに載せる
            this.sessionShohinSrchOrderForm.setSrchOrderForm(srchOrderForm);
            if (this.sessionShohinSrchOrderForm.getSrchOrderForm().getSortItemName().equals(srchOrderForm.getSortItemName())) {
                if (srchOrderForm.getSortOrder().equals("A")) {
                    srchOrderForm.setSortOrder("D");
                } else {
                    srchOrderForm.setSortOrder("A");
                }
            } else {
                srchOrderForm.setSortOrder("A");
            }
            model.addAttribute("srchOrderForm", srchOrderForm);
        }

・shohinListSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・this.sessionShohinSrchForm.getShohinSrchForm(),:セッションスコープ・商品情報検索条件Form
 ・this.sessionShohinSrchOrderForm.getSrchOrderForm():セッションスコープ・商品情報タイトル行ソート順Form
 ・model:Model
 ・pageable:pageableオブジェクト

        shohinListSub(this.sessionShohinSrchForm.getShohinSrchForm(), this.sessionShohinSrchOrderForm.getSrchOrderForm(), model, pageable);

・セッションスコープ・商品情報検索条件Formをmodelアトリビュートに設定している。

        model.addAttribute("shohinSrchForm", this.sessionShohinSrchForm.getShohinSrchForm());

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。

        return "/members/admin/shohin/shohinList";
    }

商品情報リスト一覧削除処理(mode=del_do)

    /**
     * 商品情報削除処理
     * 
     * @param mode モード
     * @param products products
     * @param model モデル
     * @param pageable ページ
     * @return
     */

・商品情報一覧で、削除対象を選択し、削除ボタンを押下すると、JavaScriptのsubmitFrm3関数 によりサブミットされます。
・URL:/members/admin/shohin/shohinによりShohinController.javaにマッピングされ、mode=del_do★del_do-01により、shohinDelDoメソッドにマッピングされます。shohinDelDoメソッドは商品情報削除処理を行い、商品情報一覧を表示します。★del_do-02

    @PostMapping(params="mode=del_do")

・リクエストパラメータmode、products(商品CD)を受け取ります。
・Model:htmlで表示する値を渡すため、引数にModelを指定する。
・@PageableDefault:ページングに関するデフォルト値を指定する。1画面の行数のみ設定でOK。
・Pageable:ページングを使用するためのpageableを指定する。例:javascript:submitFrm3('del_do','A210721002',0);の0がpageで、0起算。pageがPageableに取り込まれる。

    public String shohinDelDo(@RequestParam("mode") String mode, 
            @RequestParam("products") String products,
            Model model, 
            @PageableDefault(
                      size=pageableDefaultSize
                ) 
            Pageable pageable) {
        log.info("delete form shohin:products={}", products);

・DBから商品CDをキーに商品情報を取得し商品Entityに設定する。

        //購入履歴情報を取得する
        Shohin 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 + "は既に削除されています");
            shohinListBackSub(model, pageable);
            return "/members/admin/shohin/shohinList";
        }

・セッションスコープsrchOrderForm(商品情報タイトル行ソート順Form)のUpdModeに"lstMode"(更新しないリスト一覧画面)を設定する。

        //更新しないリスト一覧画面にする
        this.sessionShohinSrchOrderForm.getSrchOrderForm().setUpdMode("lstMode");
        try {

・商品情報DBを主キー指定で削除する。

            shohinService.delete(products);
        } catch(Exception e){

・例外エラーメッセージが"invalid pk"の時は、 successMessage="既に削除されています"をmodelアトリビュートに設定している。

            if (e.getMessage() != null && e.getMessage().equals("invalid pk")) {
                model.addAttribute("successMessage", "『products』=" + products + "は既に削除されています");
            } else {

・DB例外発生時はshohinServiceでrollbackされている。例外をキャッチしたら、ログを書いて例外を投げる。画面はシステム共通例外発生画面になる。「システム共通例外発生画面」シート参照
・補足:Throwable.Errorは、ここでキャッチせずに、システム共通例外発生画面で処理している。

                e.printStackTrace();
                log.error("DBエラーが発生しました", e);
                throw e;
            }
            shohinListBackSub(model, pageable);
            return "/members/admin/shohin/shohinList";
        }

・shohinListBackSubメソッド(商品情報リスト一覧表示サブ処理。DBデータ検索などを行っている)を実行する。
・パラメータの意味
 ・model:Model
 ・pageable:作成したpageableオブジェクト
・補足:shohinListBackSubメソッドは、shohinSrchForm(商品情報検索条件Form)、srchOrderForm(商品情報タイトル行ソート順Form)を、セッションスコープのsessionShohinSrchForm、sessionShohinSrchOrderFormから取得してDB検索に使用している。

        shohinListBackSub(model, pageable);

・DB削除OK時は、successMessage="商品情報削除が完了しました"をmodelアトリビュートに設定している。★del_do-02

        model.addAttribute("successMessage", "商品情報削除(" + "『products』=" + products + ")が完了しました");

・遷移先として、/resources/templates/members/admin/shohin/shohinList.html(商品情報一覧画面)をテンプレートファイルとする。

        return "/members/admin/shohin/shohinList";
    }

shohinListSub(検索条件で検索するサブ)

    /**
     * shohinListSubメソッド
     * 検索条件で検索するサブ
     * 
     * @param shohinSrchForm 商品情報リスト検索条件
     * @param srchOrderForm 商品情報リスト昇順降順条件
     * @param mode モード
     * @param pageable ページ
     */
    private void shohinListSub(ShohinSrchForm shohinSrchForm, SrchOrderForm srchOrderForm, Model model, Pageable pageable) {

・Functions.editSortItemNameOrderメソッド(SortItemNameとSortOrderの内容をチェック、編集する)を実行し、ソート項目が存在しないときや、ソート順がAでもDでもないとき、デフォルト値を設定する。
・パラメータの意味
 ・srchOrderForm:商品情報タイトル行ソート順Form
 ・sortItemNames:ソート項目の項目名(Entityの項目名。テーブル項目名ではない)

        //SortItemNameとSortOrderの内容をチェック、編集する
        Functions.editSortItemNameOrder(srchOrderForm, sortItemNames);
        //検索SQL作成

・editSqlメソッド(SortItemNameとSortOrderの内容をチェック、編集する)をパラメータ”count”で実行し、レコード件数検索SQLを作成する。
・editSqlメソッド(SortItemNameとSortOrderの内容をチェック、編集する)をパラメータ”select”で実行し、レコード検索SQLを作成する。
・getArgsListメソッド(SQL文用変数リスト作成)をパラメータshohinSrchForm(商品情報検索条件Form)で実行し、SQL文用変数リストを作成する。
・shohinService.getFindsShohinメソッド(商品情報を、条件及び、ページング情報により検索する)を実行し、Pageオブジェクトを作成する。
・パラメータの意味
 ・countSql:レコード数検索SQL
 ・selectSql:レコード検索SQL
 ・argsList:SQL文用変数リスト
 ・pageable:pageableオブジェクト

        String countSql = editSql("count");
        String selectSql = editSql("select");
        List<Object> argsList = getArgsList(shohinSrchForm);
        Page<Shohin> shohinsPage = shohinService.getFindsShohin(countSql, selectSql, argsList, pageable);

・検索結果・商品情報Entityリスト(shohinsPage)の、DBエレメント(業種、大分類、中分類、小分類)のEntityオブジェクト(BiztypeCdObj、CategoryCdObj、SubcategoryCdObj、ExtracategoryCdObj)が取得できないときは、オブジェクトがnulllになるので、画面表示の時、NullPointerExceptionが起きないようnewしている。

        for (Shohin shohin : shohinsPage.getContent()) {
            //大分類、中分類、小分類が見つからなかった場合
            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());
            }
        }

・Pageオブジェクト(shohinsPage)をmodelアトリビュートに設定している。
・検索結果・商品情報Entityリスト(shohinsPage)をmodelアトリビュートに設定している。

        model.addAttribute("page", shohinsPage);
        model.addAttribute("shohins", shohinsPage.getContent());

・PageNavi.getHTMLメソッド(PageオブジェクトのページングHTMLを戻す)を実行し、ページングHTMLを作成する。★01
・パラメータの意味
 ・5:1画面あたりのページ数
 ・shohinsPage:Pageオブジェクト
 ・"/members/admin/shohin/shohin":遷移先url

        String strPaging = PageNavi.getHTML(5, shohinsPage, "/members/admin/shohin/shohin");
        //log.debug("pageable.getPageSize()=" + pageable.getPageSize());
        //log.debug("shohinsPage.getTotalPages()=" + shohinsPage.getTotalPages());
        //log.debug("shohinsPage.getNumber()=" + (shohinsPage.getNumber()+1));
        //log.debug("strPaging=" + strPaging);

・strPaging(ページングHTML文字列)をmodelアトリビュートに設定している。

        model.addAttribute("strPaging", strPaging);
    }

    /**
     * editSqlメソッド
     * SQL文を編集する
     * 
     * @param kbn count:件数SQL、select:検索SQL
     * @return SQL文
     */
    private String editSql(String kbn) {
        //リプレースメントのインデックス
        int i = 0;
        Map<String,Integer> map = new HashMap<String,Integer>();
        //リプレースメントのインデックスをマップで渡すための設定。(FromToの検索条件SQL作成などで使う)
        map.put("i",i);
        String sql = "from Shohin s ";
        String where = "";

・where(検索条件)をshohinSrchForm(商品情報検索条件Form)から設定している。
・「javaSpringBootテーブル項目一覧などの定義.xlsm」の項目を参照しPGMが自動作成されている。
 ・検索項目順(N列)に数字が入っている項目のみ作成される。★02
 ・検索項目一致条件(O列)の条件により、前方一致以外のとき、=が設定される。★03

        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getProducts())?"":((i==0?"":" and") + " s.products = :p" + ++i));

・検索項目一致条件(O列)の条件により、前方一致のとき、likeが設定される。★04

        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getProductsname())?"":((i==0?"":" and") + " s.productsname like :p" + ++i));
        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getBiztypeCd())?"":((i==0?"":" and") + " s.biztypeCd = :p" + ++i));
        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getCategoryCd())?"":((i==0?"":" and") + " s.categoryCd = :p" + ++i));
        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getSubcategoryCd())?"":((i==0?"":" and") + " s.subcategoryCd = :p" + ++i));
        where += (ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getExtracategoryCd())?"":((i==0?"":" and") + " s.extracategoryCd = :p" + ++i));

・項目チェック内容(J列)により、検索チェックボックスは、チェックされた分だけ条件Orになる。★05

        if (!ObjectUtils.isEmpty(this.sessionShohinSrchForm.getShohinSrchForm().getOpenkbn1Array()) && this.sessionShohinSrchForm.getShohinSrchForm().getOpenkbn1Array().length > 0) {
            boolean firstFlg = true;
            if (this.sessionShohinSrchForm.getShohinSrchForm().getOpenkbn1Array()[0] != null && !this.sessionShohinSrchForm.getShohinSrchForm().getOpenkbn1Array()[0].equals("")) {
                where += ((i==0?"":" and") + "(");
                for (String openkbn1: this.sessionShohinSrchForm.getShohinSrchForm().getOpenkbn1Array()){
                    where += (firstFlg == true?"":" or") + " s.openkbn1 = :p" + ++i;
                    firstFlg = false;
                }
                where += ")";
            }
        }
        map.put("i",i);

・項目チェック内容(J列)が、タイムスタンプで、検索項目一致条件(O列)の条件がFromToの時、★06
 ・ Functions.editDateFromToメソッド(検索用Date型FromToのSQLを作成する)を実行し、where(検索条件)を作成する。
  ・パラメータの意味
  ・"s.insdt":項目のsql名
  ・this.sessionShohinSrchForm.getShohinSrchForm().getInsdtFrom():日付From。Dateオブジェクト
  ・this.sessionShohinSrchForm.getShohinSrchForm().getInsdtTo():日付To。Dateオブジェクト
  ・map:リプレースメントのINDEXをKEY="i"で持つ

        where += Functions.editDateFromTo("s.insdt", this.sessionShohinSrchForm.getShohinSrchForm().getInsdtFrom(),this.sessionShohinSrchForm.getShohinSrchForm().getInsdtTo(), map);
        i = map.get("i");
        map.put("i",i);
        where += Functions.editDateFromTo("s.updt", this.sessionShohinSrchForm.getShohinSrchForm().getUpdtFrom(),this.sessionShohinSrchForm.getShohinSrchForm().getUpdtTo(), map);
        i = map.get("i");
        //条件があるとき
        if (i != 0) {
            sql = sql + "where " + where;
        }

・パラメータが"count"のときは、レコード件数検索SQLを作成する。

        if (kbn.equals("count")) {
             sql =  "select count(s) " + sql;
        } else {

・パラメータが"select"のときは、order by (ソート順)をsrchOrderForm(商品情報タイトル行ソート順Form)から設定し、レコード検索SQLを作成する。

             sql =  "select s " + sql + " order by s." + 
                        this.sessionShohinSrchOrderForm.getSrchOrderForm().getSortItemName() + " "  + 
                        (this.sessionShohinSrchOrderForm.getSrchOrderForm().getSortOrder().equals("A")?"ASC":"DESC");;
        }
        return sql;
    }

    /**
     * getArgsListメソッド
     * SQL文用変数
     * 
     * @param shohinSrchForm
     * @return SQL文用変数リスト(型は、String、Long、Booleanなどあるので、Objectにしている)
     */
    private List<Object> getArgsList(ShohinSrchForm shohinSrchForm) {
        List<Object> argsList = new ArrayList<Object>();

・SQL文用変数リストをshohinSrchForm(商品情報検索条件Form)から設定している。
・「javaSpringBootテーブル項目一覧などの定義.xlsm」の項目を参照しPGMが自動作成されている。
 ・検索項目順(N列)に数字が入っている項目のみ作成される。★02
 ・検索項目一致条件(O列)の条件により、前方一致以外はshohinSrchFormの項目値が設定される。★03

        if (!ObjectUtils.isEmpty(shohinSrchForm.getProducts())) {
            argsList.add(shohinSrchForm.getProducts());
        }

・検索項目一致条件(O列)の条件により、前方一致のとき、shohinSrchFormの項目値に%を追加し、設定される。★04

        if (!ObjectUtils.isEmpty(shohinSrchForm.getProductsname())) {
            argsList.add(shohinSrchForm.getProductsname() + "%");
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getBiztypeCd())) {
            argsList.add(shohinSrchForm.getBiztypeCd());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getCategoryCd())) {
            argsList.add(shohinSrchForm.getCategoryCd());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getSubcategoryCd())) {
            argsList.add(shohinSrchForm.getSubcategoryCd());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getExtracategoryCd())) {
            argsList.add(shohinSrchForm.getExtracategoryCd());
        }

・項目チェック内容(J列)が、検索チェックボックスは、チェックされた分だけshohinSrchFormの項目値が設定される。★05

        if (!ObjectUtils.isEmpty(shohinSrchForm.getOpenkbn1Array()) && shohinSrchForm.getOpenkbn1Array().length > 0) {
            for (String openkbn1: shohinSrchForm.getOpenkbn1Array()){
                if (openkbn1 != null && !openkbn1.equals("")) {
                    argsList.add(openkbn1);
                }
            }
        }

・項目チェック内容(J列)が、タイムスタンプで、検索項目一致条件(O列)の条件がFromToの時、shohinSrchFormのTo項目値に1日追加する。★06

        if (!ObjectUtils.isEmpty(shohinSrchForm.getInsdtFrom())) {
            argsList.add(shohinSrchForm.getInsdtFrom());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getInsdtTo())) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(shohinSrchForm.getInsdtTo());
           //"<"条件にするので、+1日する
            calendar.add(Calendar.DAY_OF_MONTH, +1);
            argsList.add(calendar.getTime());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getUpdtFrom())) {
            argsList.add(shohinSrchForm.getUpdtFrom());
        }
        if (!ObjectUtils.isEmpty(shohinSrchForm.getUpdtTo())) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(shohinSrchForm.getUpdtTo());
           //"<"条件にするので、+1日する
            calendar.add(Calendar.DAY_OF_MONTH, +1);
            argsList.add(calendar.getTime());
        }
        return argsList;
    }