Java 处理JSP页面时的JasperException:bean name';的BindingResult和普通目标对象都不是;命令';可用作请求属性

Java 处理JSP页面时的JasperException:bean name';的BindingResult和普通目标对象都不是;命令';可用作请求属性,java,tomcat,spring-mvc,Java,Tomcat,Spring Mvc,尝试访问admin.jsp页面时,出现以下错误: org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/admin.jsp at line 11 8: <form:form method="post"> 9: 10: Infotext<br /> 11: <form:input path="in

尝试访问admin.jsp页面时,出现以下错误:

    org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/admin.jsp at line 11

8:  <form:form method="post">
9:  
10:         Infotext<br />
11:         <form:input path="infoBody"/><br /><br />
12:         <br /><br />
13:  
14:         <input type="submit" value="Submit">


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:519)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:422)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:160)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:147)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:138)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:122)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:408)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
    org.apache.jsp.WEB_002dINF.jsp.admin_jsp._jspx_meth_form_005finput_005f0(admin_jsp.java:143)
    org.apache.jsp.WEB_002dINF.jsp.admin_jsp._jspx_meth_form_005fform_005f0(admin_jsp.java:104)
    org.apache.jsp.WEB_002dINF.jsp.admin_jsp._jspService(admin_jsp.java:68)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
InfoTextFormController.java:

package se.hsr.controllers;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import se.hsr.models.InfoText;

@Controller
public class InfoTextFormController extends SimpleFormController{

    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        InfoText infoText = new InfoText();
        return infoText;
    }

    @RequestMapping("/admin")
    public ModelAndView onSubmit(Object command) throws ServletException {
        InfoText infoText = (InfoText) command;
        InfoTextController infoTextController = new InfoTextController();

        boolean infoTextSaved = infoTextController.saveInfoText(infoText);

        if (infoTextSaved)
            {
            return new ModelAndView("admin");
            }
        else
            {
            return new ModelAndView("admin");
            }
    }

}
admin.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
<body>
    <h1>Adminpage</h1>

    <form:form method="post">

        Infotext<br />
        <form:input path="infoBody"/><br /><br />
        <br /><br />

        <input type="submit" value="Submit">

    </form:form>
</body>
</html>

管理员页面
Infotext




我错过了什么?
我已经使用完全相同的技术获得了一个登录表单,可以毫无问题地工作,所以这个错误真的让我很困惑。提前感谢您的帮助。

您正在混合两种不同的方法来创建控制器:新的带注释的控制器(
@Controller
/
@RequestMapping
)和旧的
SimpleFormController

使用带注释的方法时,控制器应如下所示:

@Controller
public class InfoTextFormController {       
    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public ModelAndView createForm() throws Exception {
        return new ModelAndView("admin", "command", new InfoText());
    }

    @RequestMapping(value = "/admin", method = RequestMethod.POST)
    public ModelAndView onSubmit(@ModelAttribute("command") InfoText infoText) {
        ...
    }       
}
@Controller
public class InfoTextFormController {       
    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public ModelAndView createForm() throws Exception {
        return new ModelAndView("admin", "command", new InfoText());
    }

    @RequestMapping(value = "/admin", method = RequestMethod.POST)
    public ModelAndView onSubmit(@ModelAttribute("command") InfoText infoText) {
        ...
    }       
}