質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2335閲覧

ModelAndviewを使用した場合のバリデーションチェック

aae_11

総合スコア178

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/04/17 01:41

編集2020/04/17 01:42

SpringBootにて、「model」クラスではなく、「ModelAndView」をコントローラに使用している場合のバリデーションチェックの参考記事、もしくは方法などがあれば教えてください。
こちらの記事など基本的に、「Model」を使用し、formからの入力を受け取っている記事が多く、ModelAndViewの記事が見当たらない状況です。
実際のコントローラークラスのコードは以下になります。(バリデーションチェックは未実装です)

package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; // import org.springframework.ui.Model; // import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.servlet.ModelAndView; @Controller public class LoginController{ @RequestMapping(value="/login",method=RequestMethod.GET) public ModelAndView input(ModelAndView mav){ mav.setViewName("login"); return mav; } @RequestMapping(value="/top",method=RequestMethod.POST) public ModelAndView send(@RequestParam(value = "email",required = false)String email,@RequestParam(value = "pssword",required = false)String password,ModelAndView mav){ mav.addObject("email","emailは、" + email + "です。"); mav.addObject("password","passwordは、" + password + "です。"); mav.setViewName("top"); return mav; } }

以下は、form画面のテンプレートファイルになります。

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ログイン画面</title> <link th:href="@{/css/login.css}" rel="stylesheet" type="text/css"> </head> <body> <div class="contain"> <div class="login_title"> <p>LOG IN</p> </div> <form class="login_form" method="post" action="/top"> <p><input class="mail_field" type="email" name="email" placeholder="Email"></p> <p><input class="password_field" type="password" name="password" placeholder="Password"></p> <p><input class="login_btn" type="submit" value="Log in"></p> </form> </div> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/17 02:38

ModelAndViewの仕様を知っていれば応用は可能かと思いますが、仕様を理解せずに採用されたのでしょうか。
m.ts10806

2020/04/17 02:45

全くないとは思えませんが(探して出ないわけではない)、PHPにおけるPDOとmysqliのように「情報が多い方を採用する」のも保守性や自己防衛に繋がるものかと思います。 情報少ないほうを布教したいのなら止めませんけど。 でもそこまで情報少ない? 「見当たらない」と断言できるならどう探したか記載してもらえませんか?書き方変えても言ってること同じですよ。「調べても見つからない」 どう探したかはじめから書けない家庭や宗教上の理由でもあるんですか? 書かないから突っ込まれ、アドバイスが得られにくくなってることにいい加減気づきましょう。 解決する気がないなら知りません。
guest

回答1

0

ベストアンサー

Validationをしたいのであれば受け取りフォームに関するクラスを作るべきだと思います。
そのクラスにバリデーション を設定してください。リンク先でいうところのinputFormクラス

今回は受け取りフォームに関するformModelを作成してそこでバリデーション を行うのが一般的かと思います。
ここに関してはModelであろうとModelAndViewであろうと変わらない気がします。

HTML

1<form class="login_form" method="post" action="/top" oh:object="{formModel}> 2 <ul> 3 <li th:each="error:${#fields.detailedErrors()}" class="err" th:text="${error.message}" /> 4 <p><input class="mail_field" type="email" name="email" placeholder="Email"></p> 5 <p><input class="password_field" type="password" name="password" placeholder="Password"></p> 6 <p><input class="login_btn" type="submit" value="Log in"></p> 7</form>

コントローラー

java

1@RequestMapping(value="/top",method=RequestMethod.POST) 2 public ModelAndView send(@ModelAttribute("formModel") @Validated FormModel formModel, BindingResult result,ModelAndView mav){ 3 4 if(result.hasErrors()){ 5 //バリデーション にひっかかったときの処理 6 } 7 mav.setViewName("top"); 8 return mav; 9 10 }

質問自体にそれほど問題があるとは思えないのですが、
どうしてこんなに皮肉じみた修正依頼が来ているのかは少し理解できません。。。

投稿2020/04/17 16:52

encho

総合スコア182

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aae_11

2020/04/18 01:39

ご回答ありがとうございます。 おかげで、理解出来て参りました。1点お伺いしたいのですが、今回ご提示頂いた、コードには「FormModel」クラスの提示はありませんが、「@ModelAttribute("formModel") 」こちらで指定しているということは、実際には、「FormModel」クラスを別途用意する必要があるということでしょうか...?
encho

2020/04/18 04:31

はいそうですね。それがリンク先のInputFormクラスにあたるものです。
aae_11

2020/04/18 06:31

ありがとうございます。 勉強になりました。
aae_11

2020/04/18 06:47 編集

mtsさんはああいう人なので、反応しないのが一番快適ですね
encho

2020/04/18 06:45

解決できたようでよかったです! 基本的にはModelを使うケースが多いかと思うので そっちで慣れていくと良いと思います
aae_11

2020/04/18 06:47

はい!ありがとうございました。 Modelクラスでも、書けるようになっていかねばと思っているので、そちらの方法も勉強していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問