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

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

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

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

Java

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

Spring

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

Q&A

1回答

6366閲覧

SpringMVCでjava.lang.IllegalStateException:

Tazusa

総合スコア41

JSP

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

Java

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

Spring

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

0グッド

1クリップ

投稿2018/06/21 15:08

編集2018/06/21 22:53

前提・実現したいこと

Spring MVCを使用し、名前を入力すると画面遷移し、
名前を表示させる簡単なエコーアプリを作成しています。

https://terasolunaorg.github.io/guideline/1.0.6.RELEASE/ja/Overview/FirstApplication.html
こちらのサイトを参考にしつつ作っているのですが、
例外が発生し、実行できません。

いろいろ調べたのですが、結局わからなかったため質問させていただきました。
どのように修正すれば実行できるでしょうか。

発生している問題・エラーメッセージ

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'echoForm' available as request attribute

原因↓

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'echoForm' available as request attribute

該当のソースコード

index.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ page session="false" %> <html> <head> <title>Home</title> </head> <body> <h1> Hello world! </h1> <form:form modelAttribute="echoForm" action="${pageContext.request.contextPath}/echo/hello"> <form:label path="name">Input Your Name:</form:label> <form:input path="name"/> <input type="submit" value="send"/> </form:form> </body> </html>

EchoController

package com.example.helloWorld.app.echo; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller @RequestMapping("echo") public class EchoController { @ModelAttribute public EchoForm setupEchoForm() { EchoForm echoForm = new EchoForm(); return echoForm; } @RequestMapping public String index(Model model) { return "echo/index"; } @RequestMapping(value="hello", method = RequestMethod.POST) public String hello(EchoForm form, Model model) { model.addAttribute("name", form.getName()); return "echo/hello"; } }

EchoForm

package com.example.helloWorld.app.echo; import java.io.Serializable; public class EchoForm implements Serializable { private String name; public EchoForm() { } public String getName() { return name; } public void setName(String name) { this.name = name; } }

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <!-- ContextLoaderListenerクラスをサーブレットコンテナのリスナクラスとして指定します. --> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <!-- AnnotationConfigWebApplicationContextクラスをサーブレットコンテナのパラメータに指定します. --> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </context-param> <context-param> <!-- 作成したコンフィギュレーションクラスをサーブレットコンテナのパラメータに指定します. --> <param-name>contextConfigLocation</param-name> <param-value>example.config.AppConfig</param-value> </context-param> <!-- Processes application requests --> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

試したこと

調べた結果、「form:fromのmodelAttributeに指定する値と、
実際にControllerでバインドさせるFormオブジェクトは名前を一致させる」必要があることは理解しました。

form:fromのmodelAttributeの値 = echoForm、
Formオブジェクトの名前もechoFormとしております。

ただ上記のサイトではFormオブジェクト名はformとなっており、理由は理解できていません。
可能であればその理由も教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

STS3.9.4
Tomcat8
java-version 1.8

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/21 22:28

参考にするなら大文字小文字は合わせたほうがいいのでは
Tazusa

2018/06/21 22:52

すみません、controllerは古いものを貼っていました。EchoForm echoFormでやっています。
guest

回答1

0

i think echobean doesn't blind properly

投稿2018/06/22 17:50

AliHassan

総合スコア351

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問