kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

フロント側をFlutter(スマホ)Thymeleaf(PC)、バックエンド側SpringBootの自動作成勉強中

16:38
①昨日の『とりあえず、以下のやり方(「@PageableDefault部分」は削除し「Pageable」はメソッドの中で作る)でやる予定。問題は次の「list_do」でページングがうまくできるかだ。』をやっている。
■MouseComputerのノートPCのjavaSpringBootプログラム側はこんな感じにした。
・Flutter向け

public class UserFlutterController extends UserCommController {
・・・
	/**
	 * ユーザー情報リスト一覧表示処理
	 * 検索ボタン押下により、ユーザー情報リスト一覧を表示する処理
	 * 
	 * @param userSrchFForm Flutter向けユーザー情報リスト検索条件+ソート条件+ページ番号
	 * @param model モデル
	 * @return jsonデータ
	 */
	@SuppressWarnings("unchecked")
	@PostMapping("/members/admin/user/userA/list_do")
	@ResponseBody
	public Map<String, Object> userListDo(@RequestBody @Validated(GroupOrder.class) UserSrchFForm userSrchFForm,
			BindingResult result,
			Model model) {
		UserSrchForm userSrchForm = (UserSrchForm)userSrchFForm;
		int page = ObjectUtils.isEmpty(userSrchFForm.getPage())||userSrchFForm.getPage().equals("0")?0:Integer.parseInt(userSrchFForm.getPage())-1;
	    Pageable pageable = PageRequest.of(page, pageableDefaultSize, Sort.unsorted());
		return (Map<String, Object>)userListDoComm(userSrchFForm, userSrchForm, result, model, pageable, true);
	}

・PC・WBB向け

public class UserPcController extends UserCommController {
・・・
	/**
	 * ユーザー情報リスト一覧表示処理
	 * 検索ボタン押下により、ユーザー情報リスト一覧を表示する処理
	 * 
	 * @param userSrchForm ユーザー情報リスト検索条件
	 * @param result チェック結果
	 * @param mode モード
	 * @param model モデル
	 * @param pageable ページ
	 * @return 遷移先 
	 */
	@PostMapping(params="mode=list_do")
	public String userListDo(@Validated(GroupOrder.class) UserSrchForm userSrchForm,
			BindingResult result,
			@RequestParam("mode") String mode,
			Model model, 
			@PageableDefault(
		  			size=pageableDefaultSize
                ) 
		  Pageable pageable) {
		return (String)userListDoComm(null, userSrchForm, result, model, pageable, false);
	}

・Flutter及びPC・WBB向け共通

public class UserCommController {
・・・
	protected Object userListDoComm(UserSrchFForm userSrchFForm, UserSrchForm userSrchForm, BindingResult result, Model model, Pageable pageable, boolean flutterFlg) {
		if (flutterFlg) {
			// Flutter向け検索条件+ソート条件+ページ番号
			model.addAttribute("userSrchFForm", userSrchFForm);
		} else {
			model.addAttribute("userSrchForm", userSrchForm);
		}
		if (result.hasErrors()) {
			model.addAttribute("itemErrorMessages", result.toString());
			return returnComm("/members/admin/user/userList", model, result, flutterFlg, "userSrchFForm");
		} else {
			//セッションに載せる
			this.sessionUserSrchForm.setUserSrchForm(userSrchForm);
			this.sessionUserSrchOrderForm.getSrchOrderForm().setSortItemName(sortItemNames[0]);
			this.sessionUserSrchOrderForm.getSrchOrderForm().setSortOrder("A");
		}
		userListSub(this.sessionUserSrchForm.getUserSrchForm(), this.sessionUserSrchOrderForm.getSrchOrderForm(), model, pageable);
		model.addAttribute("srchOrderForm", this.sessionUserSrchOrderForm.getSrchOrderForm());
		return returnComm("/members/admin/user/userList", model, result, flutterFlg, "userSrchFForm");
	}

②Flutter側のラジオボタンにデフォルトが入っていなかった。ので、Elements.elementsListメソッドを作って、入れた。

class UserList extends StatefulWidget {
・・・
            Container(
              margin: const EdgeInsets.fromLTRB(10.0, 0, 10.0, 5),
              padding: const EdgeInsets.fromLTRB(10.0, 0, 10.0, 0),
              decoration: CommUtils.commBoxDecoration(),
              child:Column(
                  children:<Widget>[Column(
                   children: Elements.elementsList("LOGIN_TYPE", "全て").map((e) =>
                  //ラジオボタン
                  RadioListTile(
                    title: Text('ログイン権限 '+ e[1]),
                    value: e[0],
                    groupValue: _userSrchForm.roles.toString(),
                    onChanged: (value) {
                      setState(() {
                        _userSrchForm.roles = e[0];
                      });
                    }
                  )
                  ).toList(),
                ),
                Text(
                  // HTTPで返却されたエラーメッセージを表示する。(エラーなしはText高=0にしている)
                  _userSrchForm.rolesErr.join("\n"),
                  textAlign: TextAlign.left,
                  overflow: TextOverflow.clip,
                  style: TextStyle(height:_userSrchForm.rolesErr==[]?0:1.2, fontSize: 12, fontWeight: FontWeight.normal, color: Colors.red),
                ),
                ],
              ),
            ),
class Elements {
・・・
  //----------------------------------------
  // 固定エレメント、デフォルト付
  //----------------------------------------
  static List<List<String>> elementsList(String key, String defaultStr) {
    List<List<String>> list = [["", defaultStr]];
    for (var element in elements[key]!) {
      list.add(element);
    }
    return list;
  }

③Flutter側の「list_do」ページングをこれからやる。
22:51
BottomNavigationBarを使おうとしたが、惨敗。さっぱり動かない。
また明日考えよう。
■2022/06/15に、Flutter_JavaSpringプログラム自動作成◎自動生成ツールをVectorに載せました。Zenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
Vector
www.vector.co.jp

・Zenn本(Flutter_JavaSpringプログラム自動作成)
zenn.dev