kazpgmの日記

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

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

8:47
「ユーザー情報一覧(更新削除)」画面作っている。
①バックエンド側SpringBootの自動作成PGMの「ユーザー情報一覧(更新削除)」のController部分は以下なのだけど、

@PostMapping(params="mode=list")
public String userList(UserSrchForm userSrchForm,
        SrchOrderForm srchOrderForm,
        @RequestParam("mode") String mode,
        Model model, 
        @PageableDefault(
                              size=pageableDefaultSize
                          ) 
          Pageable pageable) {

これを、Flutter用にするには、以下の「XXXXXXForm」部分をどうするか(@RequestBodyは1つしか書けないらしい)とか、@PageableDefault部分とか、Pageableとかどうしたら動くか。悩んでいる。「ユーザー登録」では、”mode”をUserFormに忍ばせたらうまく動いたので、同じようにやってみようと思っている。

@PostMapping("/members/admin/user/userA/list")
@ResponseBody
public Map<String, Object> userListFlutter(@RequestBody @Validated(GroupOrder.class)  XXXXXXForm xXXXXXForm,
        Model model) {

10:30
①「タイポ:In word」の警告が気になるので、とりあえず辞書登録した。


「More actions」をクリック

「Save 'Srch' to dictionary」をクリック。警告が消えたのでストレスない。

18:16
@RequestBodyは1つしか書けないらしいの件
①取り合えず出た検索条件画面

②Flutter側のユーザー情報検索条件
Flutterのユーザー情報検索条件+ソート条件+ページ番号をまとめたもの。SpringBootのControllerに@RequestBodyは1つしか書けないらしいので、Flutter側も1つで受け渡しするようにした。(UserSrchForm←SrchOrderForm←MessageForm)

class UserSrchForm extends SrchOrderForm{
  //プロパティ 入出力データ用
  late String name; // 名前
  late String email; // メールアドレス
  late String roles; // ロール
  late String enableFlag; // パ可否フラグ
  //プロパティ エラーメッセージ用
  late List<String> nameErr; // 名前
  late List<String> emailErr; // メールアドレス
  late List<String> rolesErr; // ロール
  late List<String> enableFlagErr; // 可否フラグ
・・・
class SrchOrderForm extends MessageForm{
  //プロパティ 入出力データ用
  late String sortItemName;
  late String sortOrder;
  late String updMode;
  //プロパティ エラーメッセージ用
  late List<String> sortItemNameErr;
  late List<String> sortOrderErr;
  late List<String> updModeErr;
・・・
class MessageForm {
  //プロパティ 実行結果メッセージ用
  late String itemErrorMessages; // 項目エラーメッセージ
  late String errorMessage; // 実行結果エラーメッセージ
  late String successMessage; // 実行結果OKメッセージ
  //そのた
  late String mode; // モード
  late String page; // ページ番号
・・・

③SpringBoot側のユーザー情報検索条件
■Flutter用Controllerのユーザー情報一覧部分。Flutterと、PCの両方共通Controller(UserCommController )を継承している。

public class UserFlutterController extends UserCommController {
・・・
	/**
	 * ユーザー情報リスト検索条件表示処理
	 * ユーザー情報リスト検索条件を表示する処理
	 *
	 * @param userSrchFForm Flutter向けユーザー情報リスト検索条件+ソート条件+ページ番号
	 * @param model モデル
	 * @param pageable ページ
	 * @return jsonデータ
	 */
	@SuppressWarnings("unchecked")
	@PostMapping("/members/admin/user/userA/list")
	@ResponseBody
	public Map<String, Object> userListFlutter(@RequestBody UserSrchFForm userSrchFForm,
			Model model, 
			@PageableDefault(
					  			size=pageableDefaultSize
	                          ) 
			  Pageable pageable) {
		SrchOrderForm srchOrderForm = new SrchOrderForm();
		UserSrchForm userSrchForm = (UserSrchForm)userSrchFForm;
		return (Map<String, Object>)userListComm(userSrchFForm, userSrchForm, srchOrderForm, model,pageable, true);
	}

■Flutter用のユーザー検索Form。controllerで@RequestBodyで取得できるクラスが1つだけみたいなので、
Flutter向け検索条件+ソート条件+ページ番号をまとめた物をユーザー検索Form(UserSrchFForm←UserSrchForm)にする。

public class UserSrchFForm extends UserSrchForm implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String mode;
	private String _csrf;
	private String page;
	
	private String sortItemName = "";
	
	@CheckSortOrder
	private String sortOrder = "";

	private String updMode = "lstMode";

}

■PC用Controllerのユーザー情報一覧部分。Flutterと、PCの両方共通Controller(UserCommController )を継承している。

public class UserPcController extends UserCommController {
	/**
	 * ユーザー情報リスト検索条件表示処理
	 * ユーザー情報リスト検索条件を表示する処理
	 *
	 * @param userSrchForm ユーザー情報リスト検索条件
	 * @param srchOrderForm ユーザー情報リスト昇順降順条件
	 * @param mode モード
	 * @param model モデル
	 * @param pageable ページ
	 * @return 遷移先
	 */
	@PostMapping(params="mode=list")
	public String userList(UserSrchForm userSrchForm,
			SrchOrderForm srchOrderForm,
			@RequestParam("mode") String mode,
			Model model, 
			@PageableDefault(
					  			size=pageableDefaultSize
	                          ) 
			  Pageable pageable) {
		return (String)userListComm(null, userSrchForm, srchOrderForm, model,pageable, false);
	}

■Flutterと、PCの両方共通Controllerのユーザー情報一覧部分

public class UserCommController {
・・・
	/**
	 * ユーザー情報リスト検索条件表示処理
	 * ユーザー情報リスト検索条件を表示する処理
	 *
	 * @param userSrchFForm Flutter向けユーザー情報リスト検索条件+ソート条件+ページ番号
	 * @param userSrchForm ユーザー情報リスト検索条件
	 * @param srchOrderForm ユーザー情報リスト昇順降順条件
	 * @param model モデル
	 * @param pageable ページ
	 * @param flutterFlg true:Flutter用 false:PC・WEB用
	 * @return Flutter用:jsonデータ PC・WEB用:遷移先
	 */
	protected Object userListComm(UserSrchFForm userSrchFForm,UserSrchForm userSrchForm, SrchOrderForm srchOrderForm, Model model, Pageable pageable, boolean flutterFlg) {
		//セッションに載せる
		this.sessionUserSrchForm.setUserSrchForm(userSrchForm);
		this.sessionUserSrchOrderForm.setSrchOrderForm(srchOrderForm);
		srchOrderForm.setSortItemName(sortItemNames[0]);
		srchOrderForm.setSortOrder("A");
		userListSub(userSrchForm, srchOrderForm, model, pageable);
		if (flutterFlg) {
			// Flutter向け検索条件+ソート条件+ページ番号
			model.addAttribute("userSrchForm", userSrchFForm);
		} else {
			model.addAttribute("userSrchForm", userSrchForm);
			model.addAttribute("srchOrderForm", srchOrderForm);
		}
		return returnComm("/members/admin/user/userList", model, null, flutterFlg, "userSrchForm");
	}

■2022/06/15に、Flutter_JavaSpringプログラム自動作成◎自動生成ツールをVectorに載せました。Zenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
Vector
www.vector.co.jp

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