2015-03-23 1 views
0

Я пытаюсь несколько вариантов решить эту проблему и ссылаюсь на множество ссылок здесь и в сети, но не смог решить эту проблему.Ни BindingResult, ни обычный целевой объект для bean-name 'clsData', доступный как атрибут запроса

  1. Я дал BindingResult в контроллере

  2. Я попытался с обоими commanName и modelAttribute в JSP

  3. В объекте ModelMap я пытался добавить объект Bean

  4. Я также дал отдельные определения для запроса на получение и отправку и добавил объект bean в запросе получения

  5. Я надеюсь, что я дал правильный путь для базового пакета «com.bankofny.inx.omx.lc.web»

  6. Правильный ModelAndView импорт «импорт org.springframework.web.servlet.ModelAndView»

Все еще я чего-то не хватает. Просьба помочь

ClsEditBody.jsp

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<%@ taglib prefix="logic" uri="http://java.sun.com/jsp/jstl/core" %> 
<form:form action="/ClsSave" method="POST" modelAttribute="clsData" onsubmit="return CheckPassword()"> 
     <form:hidden path="ukey" /> 
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="form"> 
      <tr> 
<td align=left valign=top><tlc:text tabindex="1" size="29" maxlength="26" property="Name"/></td> 
</tr> 
</table> 
</form:form> 

tradelc-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-4.0.xsd 
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

     <context:annotation-config /> 
     <!-- Scans within the base package of the application for @Components to configure--> 
     <context:component-scan base-package="com.bankofny.inx.omx.lc.web" /> 
<mvc:annotation-driven /> 
<bean id="messageSource" 
       class="org.springframework.context.support.ResourceBundleMessageSource"> 
       <property name="basename" value="resources.application" /> 
     </bean> 


     <bean id="viewResolver" 
       class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
       <property name="viewClass" 
        value="org.springframework.web.servlet.view.JstlView"></property> 
       <property name="prefix" value="/WEB-INF/jsp/"></property> 
       <property name="suffix" value=".jsp"></property> 
     </bean> 
</beans> 

ClsSaveAction.java:

@Controller 
public class ClsSaveAction implements OMXServiceIDs { 
     @RequestMapping(value = "/ClsSave", method = RequestMethod.GET) 
      public ModelAndView ClsSave(Object command) throws Exception{ 
       ModelAndView mv = new ModelAndView("ClsSave"); 
       mv.addObject("clsData", new ClauseData()); 
       return mv; 

      //return new ModelAndView("ClsEdit", "command", new ClauseData()); 
      } 
@RequestMapping(value = "/ClsSave", method = RequestMethod.POST) 
    public ModelAndView execute(HttpServletRequest request, 
           HttpServletResponse response, 
           @ModelAttribute("clsData") ClauseData clauseData, 
           BindingResult bindingResult, 
           Model model) 
     throws Exception { 
     //DynaActionForm daform = (DynaActionForm) form; 
       model.addAttribute("clsData", new ClauseData()); 
. 
. 
. 
. 
. 
. 
return new ModelAndView("Main", "clsData", new ClauseData()); 
} 
} 
} 

Структура проекта:

Src/main/java 
| 
| 
com.bankofny.inx.omx.lc.web.actions 
| 
     ClsSaveAction.java 
| 
com.bankofny.inx.omx.lc.web.bean 
|  
     ClauseData.java 

Исключение:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'clsData' available as request attribute 
     org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) 
     org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) 
     org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) 
     org.springframework.web.servlet.tags.form.HiddenInputTag.writeTagContent(HiddenInputTag.java:79) 
     org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) 
     org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) 
     org.apache.jsp.cls.ClsEditBody_jsp._jspx_meth_form_005fhidden_005f0(ClsEditBody_jsp.java:356) 
     org.apache.jsp.cls.ClsEditBody_jsp._jspx_meth_form_005fform_005f0(ClsEditBody_jsp.java:255) 
     org.apache.jsp.cls.ClsEditBody_jsp._jspx_meth_tlc_005fin_005f0(ClsEditBody_jsp.java:214) 

ответ

1

При отправке формы будет пытаться связать значения формы ввода в свойствах вашего clsData боба. Это означает, что bean-компонент должен быть уже в модели, когда вы создаете JSP с формой.

В обработчике контроллера, который перенаправляет на ваш ClsEditBody вы должны добавить ClauseData боб в модели, что-то вроде

 @RequestMapping(value = "/ClsEdit", method = RequestMethod.GET) 
     public ModelAndView clsEdit() throws Exception{ 
      new ModelAndView("ClsEditBody", "clsData", new ClauseData()); 
     } 

UPDATE после получения дополнительной информации

код, предоставленные в ответе, будут работать, но, кроме того, вы должны также аннотировать контроллер InformLoginAction с @SessionAttributes("clsData") , И добавьте метод атрибута модели к вашему контроллеру InformLoginAction. Это обеспечит, чтобы объект команды привязки был установлен, когда вы визуализируете форму.

@ModelAttribute("clsData") 
public ClauseData createBean() { 
    return new ClauseData(); 
} 

метод атрибут модели createBean будет называться на каждый запрос, прежде чем метод вызывается обработчик, но так как вы используете @SessionAttribute с совпадающим clsData ключ, метод будет вызываться только один раз, и бит будет извлекаться из атрибутов сеанса при последующих вызовах

+0

Добавлен этот '@SessionAttributes (" clsData ") public class InformLoginAction {...'. Пробовал это также ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName ("menu"); modelAndView.addObject ("clsData", новый ClauseData()); return modelAndView; '. Не повезло. Пожалуйста, помогите – vysh

+0

Я предложил другое редактирование, надеюсь, что это вам поможет –

+0

Я добавил аннотацию '@ ModelAttribute'. В моем ClsEditBody.jsp я напечатал объект clsData 'System.out.println (session.getAttribute (" clsData "). ToString());' и напечатал 'com.bankofny.inx.omx.lc.web.bean. ClauseData @ cbb9c6'. Означает ли это, что мой объект clsData доступен для использования в ClsEditBody.jsp, но все же я получаю это исключение? Любые указатели PLS ... – vysh

Смежные вопросы

 Смежные вопросы