2011-04-13 67 views
0

Hei,spring multiactioncontroller命令對象

我想在擴展MultiActionController的類中獲得一個命令對象。控制器類是:

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

您需要在模型中放置一個名稱爲「響應」的對象。因爲表單期望它: <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中使用的名稱(「響應」)放在模型中,並通過ModelAndView返回。你必須用所有的命令方法來完成它,它使用jsp來渲染。

它接縫,你正在使用Spring 2.x,你可能應該看看SimpleFormController。

+0

你能否給我一些更多的細節? – Alexandra 2011-04-13 15:50:26

+0

我仍然得到相同的錯誤.. – Alexandra 2011-04-13 15:59:33

+0

什麼時候發生錯誤,並且是命令方法,填充窗體的方法,還是窗體「調用」方法? – Ralph 2011-04-13 16:12:58