簡體   English   中英

處理JSP頁面時出現JasperException:BeanResult'command'的BindingResult和普通目標對象都不能用作請求屬性

[英]JasperException when processing JSP page: Neither BindingResult nor plain target object for bean name 'command' available as request attribute

嘗試訪問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)

InfoText.java:

package se.hsr.models;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class InfoText implements Serializable{

    private int id;
    private String infoBody;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getInfoBody() {
        return infoBody;
    }
    public void setInfoBody(String infoBody) {
        this.infoBody = infoBody;
    }
}

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>

我想念的是什么? 已經使用完全相同的技術獲得了登錄表單,可以正常工作,所以這個錯誤確實使我迷惑不解。 在此先感謝您的幫助。

您正在混合兩種不同的創建控制器的方法:新的帶注釋的控制器( @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) {
        ...
    }       
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM