1

私はSpringMVCを初めて使用するので、混乱しています。StrutsでMVCを使用したので、MVCパターンを取得します。それは私が今春にそれをすることを学んでいるということだけです、そして私はマッピングが異なって行われるので私は混乱しています。オンラインチュートリアルを調べてみましたが、まだわかりません。以下は私の現在の問題の概要です。誰か助けてもらえますか?ありがとう。

私のJSPフォーム(GuestBook.jspから):

<form:form modelAttribute="comments" method="post" action="GuestBook.jsp">
    <table>
        <tr>
            <td>Name:</td>
            <td><form:input path="comment.name" maxlength="150" /></td>
        </tr>
        <tr>
            <td>Message:</td>
            <td><form:textarea path="comment.message" rows="10" cols="50" /></td>
        </tr>
        <tr>
            <td><button type="submit" value="Submit" /></button></td>
            <td>&nbsp;</td>
        </tr>
    </table>
</form:form>

applicationContext.xmlから:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean name="getComments" class="com.controller.CommentController" />

CommentController.javaから(関連する部分のみ):

@Controller
@RequestMapping("/GuestBook.jsp")
public class CommentController {
    // Variables and getters and setters follow,
    // not part of the problem

    @RequestMapping(method = RequestMethod.GET)
public ModelAndView handleRequest(@ModelAttribute Comment comment) throws Exception {
    // Method continues, but not part of the problem

エラーレポート:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'getComments' 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.GuestBook_jsp._jspx_meth_form_005finput_005f0(GuestBook_jsp.java:256)
    at org.apache.jsp.GuestBook_jsp._jspx_meth_form_005fform_005f0(GuestBook_jsp.java:207)
    at org.apache.jsp.GuestBook_jsp._jspService(GuestBook_jsp.java:121)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
4

2 に答える 2

1

問題は、オブジェクトがjspフォームにバインドされていないことだと思います。commandName="getComments"属性がpojoフィールドをフォームフィールドにバインドできるように、pojoクラスのオブジェクトをmodelMapに配置していない可能性があるためです。

ここでは、pojoクラス名はGetCommentsであると想定しています。

コントローラメソッドのメソッドシグネチャを次のように変更することをお勧めします。

@RequestMapping(method = RequestMethod.GET) 
public ModelAndView handleRequest(@ModelAttribute GetComments getComments) throws Exception {
// your code in the controller and the return statement of your model and view.
}

アップデート

また、commandNameの代わりにjspで、を使用しますmodelAttribute="getComments"

これがお役に立てば幸いです。乾杯。

于 2012-06-20T06:04:42.560 に答える
0

@ModelAttribute GetComments getCommentshandleメソッドの最初のパラメーターとしてを持っている必要があります。

于 2012-06-20T07:42:16.690 に答える