объект команды Spring multiactioncontroller - PullRequest
0 голосов
/ 13 апреля 2011

Hei

Я пытаюсь получить объект команды в классе, который расширяет MultiActionController. Класс Controller:

public class RaspunsNouController extends MultiActionController
{   
    public ModelAndView submit(HttpServletRequest request,HttpServletResponse response,Response obj) throws Exception 
    {
       System.out.println("Submit method called");
       System.out.println(request.getParameter("username"));
       Response obiectR = (Response) obj;
       System.out.println(obiectR.getClass());
       System.out.println(obiectR.getAgence_response());
       System.out.println(obiectR.getResponse());
       return new ModelAndView("raspunsNou");
    }    
}

важная часть файла JSP:

 <form:form  method="POST" commandName="response" style="position:relative; top:50px; left:100px; width:400px; border:2px red solid;" >
    <form:textarea path="response" />

    <br/><br/>
    <button type="button" onclick="location.href='submit.htm'">Valider</button>
    <button type="button">Annuler</button>     
 </form:form>

И ошибка, которую я получаю:

org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'response' available as request attribute
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:532)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:450)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    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.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'response' available as request attribute
    org.springframework.web.servlet.support.BindStatus.(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.TextareaTag.writeTagContent(TextareaTag.java:95)
    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.raspunsNou_jsp._jspx_meth_form_005ftextarea_005f0(raspunsNou_jsp.java:221)
    org.apache.jsp.WEB_002dINF.jsp.raspunsNou_jsp._jspx_meth_form_005fform_005f0(raspunsNou_jsp.java:140)
    org.apache.jsp.WEB_002dINF.jsp.raspunsNou_jsp._jspService(raspunsNou_jsp.java:80)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    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.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Я понимаю, что должен где-то выполнить связывание (как в simpleFormController, в методе formBackingObject, но я не знаю, как и где).

1 Ответ

1 голос
/ 13 апреля 2011

Вам необходимо поместить объект с именем «response» в вашу модель. Потому что ваша форма ожидает этого: <form:form method="POST" commandName="response"

   Response obiectR = (Response) obj;

   ModelMap model = new ModelMap();
   model.addAttribute("response", obiectR);
   return new ModelAndView("raspunsNou", model);

Форма пружины Ссылка:

Предыдущий JSP (<form method="POST">...) предполагает, что имя переменной объекта поддержки формы - «команда». Если вы поместили объект поддержки формы в модель под другим именем (определенно, это лучший метод), то вы можете привязать форму к именованной переменной следующим образом: <form:form commandName="user">

Итак, вам нужно: поместить объект команды с именем, используемым в jsp («response») в Model, и вернуть его через ModelAndView. Вы должны сделать это во всем командном методе, который использует THE JSP для рендеринга.

Это говорит о том, что вы используете Spring 2.x, возможно, вам стоит взглянуть на SimpleFormController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...