私はSpring 3の注釈fuのロープを学んでいるだけで、newbの悪夢の例外につまずいた。助けていただければ幸いです。
フォームjspコードは次のとおりです。
<form:form method="POST" action="login.htm" modelAttribute="login">
....
<form:input path="email" size="20" />
....
コントローラーコード(この時点では、単に水域をテストしているため、どのページにも移動せず、空の文字列を返すだけです):
@Controller
@SessionAttributes
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login( @ModelAttribute("login") Login login,
BindingResult result) {
System.out.println(" email entered "+ login.getEmail()+ "\n");
return "test";
}
「ログイン」は、適切なセッターとゲッターを持つフォームBeanです。
私は、ディスパッチャサーブレットの次のコードがアノテーションスキャンを処理するものと想定しています。
<context:component-scan
base-package="com.testAnnFu.controller" />
これは、ランディングjspページをロードしようとするとスローされる恥ずべき例外です。
SEVERE: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
Java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.Java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.Java:174)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.Java:194)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.Java:160)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.Java:147)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.Java:138)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.Java:122)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.Java:408)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.Java:140)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.Java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.Java:79)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_input_0(landing_jsp.Java from :208)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_form_0(landing_jsp.Java from :164)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspService(landing_jsp.Java from :107)
at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:403)
at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:492)
at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.Java:787)
at org.Apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.Java:649)
at org.Apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.Java:483)
at org.Apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.Java:454)
at org.Apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.Java:350)
at org.Apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.Java:300)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.Java:238)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.Java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.Java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:669)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:574)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:281)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)
at org.Apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.Java:655)
at org.Apache.catalina.core.StandardPipeline.invoke(StandardPipeline.Java:595)
at com.Sun.enterprise.web.WebPipeline.invoke(WebPipeline.Java:98)
at com.Sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.Java:91)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:162)
at org.Apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.Java:330)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:231)
at com.Sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.Java:174)
at com.Sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.Java:828)
at com.Sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.Java:725)
at com.Sun.grizzly.http.ProcessorTask.process(ProcessorTask.Java:1019)
at com.Sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.Java:225)
at com.Sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.Java:137)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:104)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:90)
at com.Sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.Java:79)
at com.Sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.Java:54)
at com.Sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.Java:59)
at com.Sun.grizzly.ContextTask.run(ContextTask.Java:71)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.Java:532)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.Java:513)
at Java.lang.Thread.run(Thread.Java:680)
WARNING: ApplicationDispatcher[/sssmgt] PWC1231: Servlet.service() for servlet jsp threw exception
Java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.Java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.Java:174)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.Java:194)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.Java:160)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.Java:147)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.Java:138)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.Java:122)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.Java:408)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.Java:140)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.Java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.Java:79)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_input_0(landing_jsp.Java from :208)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_form_0(landing_jsp.Java from :164)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspService(landing_jsp.Java from :107)
at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:403)
at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:492)
at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.Java:787)
at org.Apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.Java:649)
at org.Apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.Java:483)
at org.Apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.Java:454)
at org.Apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.Java:350)
at org.Apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.Java:300)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.Java:238)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.Java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.Java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:669)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:574)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:281)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)
at org.Apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.Java:655)
at org.Apache.catalina.core.StandardPipeline.invoke(StandardPipeline.Java:595)
at com.Sun.enterprise.web.WebPipeline.invoke(WebPipeline.Java:98)
at com.Sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.Java:91)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:162)
at org.Apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.Java:330)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:231)
at com.Sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.Java:174)
at com.Sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.Java:828)
at com.Sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.Java:725)
at com.Sun.grizzly.http.ProcessorTask.process(ProcessorTask.Java:1019)
at com.Sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.Java:225)
at com.Sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.Java:137)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:104)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:90)
at com.Sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.Java:79)
at com.Sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.Java:54)
at com.Sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.Java:59)
at com.Sun.grizzly.ContextTask.run(ContextTask.Java:71)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.Java:532)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.Java:513)
at Java.lang.Thread.run(Thread.Java:680)
WARNING: StandardWrapperValve[dispatcher]: PWC1406: Servlet.service() for servlet dispatcher threw exception
Java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.Java:141)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.Java:174)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.Java:194)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.Java:160)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.Java:147)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.Java:138)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.Java:122)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.Java:408)
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.Java:140)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.Java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.Java:79)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_input_0(landing_jsp.Java from :208)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspx_meth_form_form_0(landing_jsp.Java from :164)
at org.Apache.jsp.WEB_002dINF.jsp.landing_jsp._jspService(landing_jsp.Java from :107)
at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:403)
at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:492)
at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.Java:787)
at org.Apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.Java:649)
at org.Apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.Java:483)
at org.Apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.Java:454)
at org.Apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.Java:350)
at org.Apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.Java:300)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.Java:238)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.Java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.Java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:669)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:574)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:847)
at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1539)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:281)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:175)
at org.Apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.Java:655)
at org.Apache.catalina.core.StandardPipeline.invoke(StandardPipeline.Java:595)
at com.Sun.enterprise.web.WebPipeline.invoke(WebPipeline.Java:98)
at com.Sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.Java:91)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:162)
at org.Apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.Java:330)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:231)
at com.Sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.Java:174)
at com.Sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.Java:828)
at com.Sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.Java:725)
at com.Sun.grizzly.http.ProcessorTask.process(ProcessorTask.Java:1019)
at com.Sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.Java:225)
at com.Sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.Java:137)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:104)
at com.Sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.Java:90)
at com.Sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.Java:79)
at com.Sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.Java:54)
at com.Sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.Java:59)
at com.Sun.grizzly.ContextTask.run(ContextTask.Java:71)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.Java:532)
at com.Sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.Java:513)
at Java.lang.Thread.run(Thread.Java:680)
form:inputの部分をノックオフし、jspページを裸にしていたので、ロードされたようです。私が入力を導入するときだけ、物事はうまくいかない。
この注釈全体がどのように配線されてModelAttributeにマップされるかについての私の理解には、ひどく間違っていることがあります。同様の例外についてStOvのすべての組み合わせと投稿を調べましたが、明らかに何かを見落としていました。誰かがここで私の失態を指摘するほど親切になるでしょうか?
コントローラーでは、ログインオブジェクトをモデルの属性として追加する必要があります。
model.addAttribute("login", new Login());
このような:
@RequestMapping(value = "/", method = RequestMethod.GET)
public String displayLogin(Model model) {
model.addAttribute("login", new Login());
return "login";
}
http://localhost:8080/projectname/login
でGET
を実行しているときにこの例外が発生します。
Vinayが正しく述べているように、あなたは間違いなく使用することができます
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String displayLogin(Model model) {
model.addAttribute("login", new Login());
return "login";
}
しかし、私はあなたがSpring 3.0で試していたと思ういくつかの代替構文を提供するつもりです。
上記の機能は次の方法でも実現できます。
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String displayLogin(Login loginModel) {
return "login";
}
そして、login.jsp
(InternalResourceViewResolver
を使用していると仮定)
<form:form method="POST" action="login.htm" modelAttribute="login">
注意:modelAttributeはlogin
ではなくloginModel
です。引数で指定したクラス名ごとです。ただし、modelAttributeがjspであるため、loginModel
を使用する場合は、以下を実行できます。
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String displayLogin(@ModelAttribute("loginModel")Login loginModel) {
return "login";
}
そしてjspは
<form:form method="POST" action="login.htm" modelAttribute="loginModel">
同じことをするための異なる方法があることを知っています。しかし、ここで注意すべき最も重要な点-
Imp Note:メソッド引数(public String displayLogin(Login loginModel)
など)にモデルクラスを追加すると、モデルオブジェクトが自動的に作成され、Modelオブジェクトに追加されます(そのため、手動で配置せずにJSPで直接アクセスできる理由です)モデル)。次に、リクエストに新しいModelObject createでマップできる属性がある場合、リクエストが検索されます。はいの場合、Springはリクエストパラメータからカスタムモデルオブジェクトクラスに値を注入します(この場合はログイン)。
あなたはこれをテストすることができます
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String displayLogin(Login loginModel, Model model) {
System.out.println(model.asMap().get("login").equals(loginModel));
return "login";
}
注:@SessionAttributes({"login"})
を指定した場合、上記の新しいカスタムモデルオブジェクトの作成は成立しない場合があります。この場合、セッションから取得して値を設定します。
私はこのような問題を抱えていましたが、いくつかの「アクション」がありました。私の解決策は次のようになります:
<form method="POST" th:object="${searchRequest}" action="searchRequest" >
<input type="text" th:field="*{name}"/>
<input type="submit" value="find" th:value="find" />
</form>
...
<form method="POST" th:object="${commodity}" >
<input type="text" th:field="*{description}"/>
<input type="submit" value="add" />
</form>
そしてコントローラー
@Controller
@RequestMapping("/goods")
public class GoodsController {
@RequestMapping(value = "add", method = GET)
public String showGoodsForm(Model model){
model.addAttribute(new Commodity());
model.addAttribute("searchRequest", new SearchRequest());
return "goodsForm";
}
@RequestMapping(value = "add", method = POST)
public ModelAndView processAddCommodities(
@Valid Commodity commodity,
Errors errors) {
if (errors.hasErrors()) {
ModelAndView model = new ModelAndView("goodsForm");
model.addObject("searchRequest", new SearchRequest());
return model;
}
ModelAndView model = new ModelAndView("redirect:/goods/" + commodity.getName());
model.addObject(new Commodity());
model.addObject("searchRequest", new SearchRequest());
return model;
}
@RequestMapping(value="searchRequest", method=POST)
public String processFindCommodity(SearchRequest commodity, Model model) {
...
return "catalog";
}
確かに-ここは「ベストプラクティス」ではありませんが、「BindingResultも、リクエスト属性として使用可能なBean名のプレーンなターゲットオブジェクトもありません」で動作します。
モデルまたはGETメソッドに渡されたオブジェクトを転送しても、まだこのエラーが発生する場合は、変数の名前を確認してください。ラクダケースでエンティティ/転送オブジェクト名を使用します。 BusinessTripDTOオブジェクトがあり、略して「trip」という名前を付けました。このエラーは、他のすべてのパーツが適切に配置されていても発生しました。 JavaおよびThymeleafで変数の名前をbusinessTripDTOに変更すると、この問題は解決しました。
フォームを初めて返すときは、modelattributeを渡すことを確認してください。以下のコードを追加することでフォームを作成できます。
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Login login)
return "test";
}
デフォルトでは、モデル属性名は、最初の小文字を含むBeanクラスの名前として使用されます
これを行うことにより、「login」という名前のバッキングオブジェクトを期待するフォームが利用可能になります。
フォームの送信後、Beanオブジェクトとbindingresultをメソッドパラメーターとして以下のように渡すことで検証を行うことができます。
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login( @ModelAttribute("login") Login login,
BindingResult result)
追加するだけ
model.addAttribute("login", new Login());
あなたの方法に..
それが動作します..