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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Spring

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

Q&A

解決済

2回答

15093閲覧

springのエラーメッセージを表示した時の挙動

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Spring

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

0グッド

0クリップ

投稿2017/05/19 10:00

現在Springの勉強でバリデーションチェックをやっており、
エラーになったときにエラメッセージが表示されるようにはなりましたが、
URLが遷移先のものになってしまい、
さらにはトップ画面を表示する際に時間を取得する様にしていたのですが、
これが消えてしまっております。

試しに入力エラー時にはリダイレクトするようにしたら、
今度はエラーメッセージが表示されません。

どの様にすればよろしいでしょうか?

以下はソースになります。

index.jsp:トップ画面のjsp

html

1<body> 2 <h1>メニューを選択</h1> 3 4 <P>現在の時間です ${serverTime}.</P> 5 6 <spring:url value="/insert" var="action" /> 7 <form:form action="${action}" method="post" modelAttribute="testForm"> 8 <form:errors path="keyword" cssStyle="color:red" element="div" /> 9 送信:<form:input path="keyword" placeholder='ここに入力してください' /> 10 <input class="Button Radius5" id="IconList3" type="submit" value="送信" /> 11 </form:form> 12 <br> 13 <div class="Button Radius5" id="IconList3"> 14 <a href="/select">参照画面</a> 15 </div> 16 17</body>

homeController:トップ画面表示時のコントローラーです

java

1 2 /** 3 * トップページの表示 4 */ 5 @RequestMapping(value = "/", method = RequestMethod.GET) 6 public String home(Locale locale, Model model) { 7 logger.info("Welcome home! The client locale is {}.", locale); 8 9 Date date = new Date(); 10 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 11 12 String formattedDate = dateFormat.format(date); 13 14 model.addAttribute("serverTime", formattedDate); 15 model.addAttribute("testForm", new testForm()); 16 17 return "index"; 18 } 19

insertController:登録画面(作成中)の表示のコントローラーです

java

1 @ModelAttribute("testForm") 2 testForm setUpForm() { 3 return new testForm(); 4 } 5 6 /** 7 * 登録ページの表示 8 */ 9 @RequestMapping(value = "/insert", method = RequestMethod.POST) 10 public String home(@Valid testForm form, BindingResult result, Model model) { 11 if(result.hasErrors()) { 12 return "index"; 13 } 14 15 logger.debug("登録ページへの遷移です"); 16 String test = form.getKeyword(); 17 18 model.addAttribute("test", test); 19 20 return "insert"; 21 }

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

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

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

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

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

guest

回答2

0

ベストアンサー

バリデーションエラーになると、SpringMVC は勝手に BindingResult にエラー結果をつめてくれます。ただし、そのエラー結果はリクエストスコープなので、当然リダイレクトすれば消えます。

これが、

試しに入力エラー時にはリダイレクトするようにしたら、
今度はエラーメッセージが表示されません。

となる理由です。

なので、非常に簡単なサンプルプログラムでは、エラー時にはforwardする(コントローラで普通にビューの名前を return する)方法がとられます。

これが

URLが遷移先のものになってしまい、 ...

となる理由です。

これまた非常に単純な解決策としては、RedirectAttribute なるものが Spring MVC にはあるのでそれを使うという方法があります。

適当にググルとサンプルとか見つかるはずです。

投稿2017/05/19 11:55

koko_u

総合スコア936

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

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

退会済みユーザー

退会済みユーザー

2017/05/22 05:05

ご回答ありがとうございます。 うまくいきました!
guest

0

java

1 @RequestMapping(value = "/insert", method = RequestMethod.POST) 2 public String home(@Valid testForm form, BindingResult result, Model model) { 3 if(result.hasErrors()) { 4 return "index"; 5 } 6(中略)7 }

にて、入力チェックエラーがあった場合(result.hasErrors() がtrue)、特に何もせず index の画面へ遷移しているからでしょう。

HomeControllerにて実装されている以下の処理

java

1 Date date = new Date(); 2 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 3 4 String formattedDate = dateFormat.format(date); 5 6 model.addAttribute("serverTime", formattedDate);

をreturn "index"する前に追加するか、2つのControllerで全く同じ処理があるので、どこかで共通化しておき、これを呼びだすようにすれば良いでしょう。

ちなみにクラスの先頭は大文字が推奨されます。

投稿2017/05/19 11:21

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2017/05/22 05:05

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問