2012-01-08 11 views
63

私はSpring 3のアノテーションfuのロープを覚えていますが、newbの悪夢の例外を偶然見つけました。助けていただければ幸いです。BindingResultもBean名のプレーンターゲットオブジェクトも要求属性として利用できません

こちらのフォームの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) 

私はフォームオフにノック:入力一部をして読み込むように見える裸のJSPページを、持っていました。私が入力を導入するときだけ、物事がうまくいかない。

私はこの全体のアノテーションがワイヤリングされ、ModelAttributeにどのようにマッピングされるのか、私の理解にはひどく間違っていることを知っています。私はStOvのすべての組み合わせとポストを似たような例外について捜したが、明らかに何かを逃した。誰かがここで私の大失敗を指摘するほど親切なことができますか?コントローラで

+0

これを参照してください[質問](http://stackoverflow.com/questions/1069958/neither-bindingresult-nor-plain-target-object-for-bean-name-available-as-request) –

+1

@ Vincent-Ramdhanieありがとうございましたが、私はその投稿を具体的にチェックし、その投稿の推奨される解決策はうまくいかないようです。添付のコードに見られるように、modelAttributeとバインディング結果の宣言を追加しました。私が何かを逃しているかどうか知らせてください。 –

+0

私には、私のコードスニペットは、春3で完全に正常に見えます。春は、モデルパラメータ(@ModelAttributeでアノテーションされている)をモデルに自動的に追加しませんか? –

答えて

109

、あなたはモデルの属性としてログインオブジェクトを追加する必要があります。このよう

model.addAttribute("login", new Login()); 

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String displayLogin(Model model) { 
    model.addAttribute("login", new Login()); 
    return "login"; 
} 
+0

ちょっと説明して、私はコントローラーでこれをやっていますか? –

+2

はい;ログインビューを呼び出すコントローラーで。 (例:ModelModel); model.addAttribute( "login"、新しいログイン()); "login"を返します。 } – Vinay

+4

ahh ...基礎はあなたと強いです。私の問題は、私がランディングページに向かい、プレインスタンス化されたモデル(私は利用できません)を探していることです。あなたの答えは一目瞭然です。私は行くと私を失望させ、自分自身を深くgroudに埋葬する。 (モデルをビューに追加する便利な方法は、適切なModelAndViewオブジェクトを返すことです。**新しいModelAndView(「着陸」、「ログイン」、新しいログイン()); **)を返す –

0

あなたのフォームを返すのが初めてで確認してくださいモデル属性をフォームに入力する必要があります。以下のコードを追加すると、フォームが必要になります。

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String login(Login login) 
    return "test"; 
} 

デフォルトでは、モデルが名前は「ログイン」命名バッキングオブジェクトを期待し、このフォームを行うことにより、最初の小文字

でBeanクラスの名前として解釈される属性の後

それに利用できるようになります

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public String login( @ModelAttribute("login") Login login, 
         BindingResult result) 
8

以下のように形がGETに行っている間あなたはこの例外を持っているでしょうあなたがメソッドのパラメータとして、あなたのBeanオブジェクトとbindingresultを渡すことで、検証を行うことができます提出されます

ビナイが正しくあなたは間違いなく

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public String displayLogin(Model model) { 
    model.addAttribute("login", new Login()); 
    return "login"; 
} 

を使用することができます。しかし、私は、私はあなたが春3.0にしようとしていたと思いますいくつかの代替構文を提供するつもりだと述べているとおり。

また、あなたが

<form:form method="POST" action="login.htm" modelAttribute="login"> 

お知らせ持つことができます(あなたがInternalResourceViewResolverを使用していると仮定)

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public String displayLogin(Login loginModel) { 
    return "login"; 
} 

、それlogin.jspで上記の機能を実現することができますmodelAttributeはloginないloginModelです。これは、あなたが議論で提供するクラス名と同じです。あなたはmodelAttributeがあるとしてloginModelを使用したい場合はしかし、あなたが行うことができますJSP次

@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"> 

を持つことになり、私は同じことを行うためだけのさまざまな方法があることを知っています。しかし、最も重要な点は、ここで注意する -

インプ注:あなたのメソッドの引数に、あなたのモデルクラスを追加すると(のようなpublic String displayLogin(Login loginModel))は、それが自動的に作成され、なぜあなたは直接のアクセスをすることができますしている(あなたのモデルオブジェクトに追加それを手動でモデルに入れないでJSPで)。要求が新しいModelObjectの作成でマップできる属性を持っている場合、それはあなたの要求を検索します。 yesの場合、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"})を与えている場合は当てはまらないかもしれません。この場合、セッションから取得して値を入力します。

+0

同じJSPページで複数のmodelAttributeを使用するにはどうすればよいですか? –

2

私はこのような問題がありましたが、いくつかの "アクション"がありました。私のソリューションは、次のようになります。

<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名のプレーンなターゲットオブジェクトのいずれも」なし作品です。

1

ちょうどそれが動作します。..あなたの方法に

model.addAttribute("login", new Login());

を追加。..

-1

私はのIntelliJ IDEAで同様の問題がありました。 私のコードは100%正しいですが、Tomcatを起動すると例外が発生します。 java.lang.IllegalStateException:BindingResultもありません

Tomcatの設定を削除してもう一度追加しました。それは私のために働いた。

画像Tomcatの設定

enter image description here

0

あなたは、モデルやメソッドをGETそれでもこのエラーを持って、あなたの変数の命名をチェックするために渡された転送オブジェクトを使用している場合。 camelcaseのエンティティ/転送オブジェクト名を使用します。私はBusinessTripDTOオブジェクトを持っていて、それを「旅行」と略しました。このエラーが発生し、他のすべての部分があったとしても発生しました。 JavaとThymeleafでvaraiblesの名前をbusinessTripDTOに変更すると、この問題が解決されました。