フロント側を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