2016-02-28 5 views
0

Я очень новичок в разработке приложений Java с использованием Spring framework. Я ранее разрабатывал приложения с использованием архитектуры MVC, но эта весна действительно убивает меня.Весна с использованием Netbeans-Ни BindingResult, ни простой целевой объект для имени bean-компонента Netbeans

Я имею в виду, что я не могу получить ни одной новой вещи за меньшее время. Во всяком случае, я сталкиваюсь с очень распространенной проблемой при обработке форм. Я много часов пробовал, искал в Интернете проблемы, и никто из них не работал. Это как-то связано с Netbeans? Я не знаю.

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <form:form action="apptest.htm" commandName="userForm" method="POST"> 
      Name:<form:input path="name" /> 
      <br> 
      Age:<form:input path="age" /> 
      <br> 
      City:<form:input path="city" /> 
      <br> 
      <input type="submit" value="Submit"> 
      <br> 
     </form:form> 

    </body> 
</html> 

InsertController.java

package SpringApp.Controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.portlet.ModelAndView; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import SpringApp.DAO.PeopleDAO; 
import SpringApp.DAO.People; 
import java.util.Map; 
import org.springframework.web.bind.annotation.ModelAttribute; 
@Controller 
@RequestMapping("/apptest.htm") 
/** 
* 
* @author ROHAN 
*/ 
public class InsertController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String viewRegistration(Map<String, Object> model) { 
     People userForm = new People();  
     model.put("userForm", userForm); 
     return "index"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    /*public String insertion(ModelMap modelMap) { 
     ApplicationContext ctx=new ClassPathXmlApplicationContext("Beans.xml");   
     PeopleDAO dao=(PeopleDAO)ctx.getBean("people"); 
     int status=dao.saveEmployee(new People("Kitty",22,"khardah")); 
     modelMap.put("msg2","success");   
     return "test"; 
    }*/ 
    public String processRegistration(@ModelAttribute(value="userForm") People people, 
      Map<String, Object> model) { 
     model.put("name",people.getName()); 
     model.put("city",people.getCity()); 
     return "test"; 
    } 
} 

People.java (Bean класс)

package SpringApp.DAO; 

public class People { 
    private int id; 
    private String name; 
    private int age; 
    private String city; 

    public People() 
    { 
     super(); 
    } 

    public People(String name,int age,String city) 
    { 
     this.name=name; 
     this.age=age; 
     this.city=city; 
    } 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    @Override 
    public String toString() { 
     return "User [name=" + name + ", age=" + age+ ", city=" + city + "]"; 
    } 
} 

диспетчеру-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?> 
<!-- was: <?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:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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"> 

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 
    <context:annotation-config /> 
    <context:component-scan base-package="SpringApp" /> 
    <mvc:annotation-driven /> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" /> 

</beans> 

index.jsp - это моя страница приветствия, настроенная в web.xml. Всякий раз, когда я запускаю проект, я получаю следующее сообщение:

29-Feb-2016 02:46:14.550 SEVERE [http-nio-8035-exec-183] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/SpringApp] threw exception [An exception occurred processing JSP page /index.jsp at line 17 

14:  </head> 
15:  <body> 
16:   <form:form action="apptest.htm" commandName="userForm" method="POST"> 
17:    Name:<form:input path="name" /> 
18:    <br> 
19:    Age:<form:input path="age" /> 
20:    <br> 


Stacktrace:] with root cause 
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'userForm' available as request attribute 
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) 
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) 
    at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) 
    at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142) 
    at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) 
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) 
    at org.apache.jsp.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:228) 
    at org.apache.jsp.index_jsp._jspx_meth_form_005fform_005f0(index_jsp.java:180) 
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:134) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Моя структура проекта выглядит следующим образом:

Web pages 
    META-INF 
    WEB-INF 
     jsp 
     test.jsp 
     dispatcher-servlet.xml 
     applicationContext.xml 
     web.xml 
    index.jsp(outside WEB-INF) 
Source Packages 
    Beans.xml 
    SpringApp.Controllers 
     InsertController 
    SpringApp.DAO 
     People.java 
     PeopleDAO.java 

test.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 

     Name: ${userForm.name} <br> 
     City: ${userForm.city} 
    </body> 
</html> 
+0

Возможный дубликат [Ни BindingResult, ни простого целевого объекта для имени боба] (http://stackoverflow.com/questions/11463883/none-bindingresult-nor-plain-target-object-for-bean-name) –

+0

Я пробовал все что я нашел здесь, но безрезультатно. Я чувствую, что это имеет какое-то отношение к netbeans. –

ответ

0

java.lang.IllegalStateException: Ни BindingResult, ни обычный целевой объект для имени боба «UserForm» доступен как атрибут запроса

Как вы можете видеть из StackTrace index.jsp не может отобразить модель атрибутов для формирования параметров ,

Это происходит потому, что у вас есть index.jsp в вашем <welcome-file-list>. Таким образом, index.jsp загружается перед контроллером и не имеет доступа к значениям модели.

Для решения этой проблемы необходимо:

  • переместить ваш index.jsp файл в папку WEB-INF/jsp;

  • изменение <welcome-file-list> к этому:

    <welcome-file-list> 
        <welcome-file></welcome-file> 
    </welcome-file-list> 
    

    или удалить этот тег на всех.

  • добавить "/" в @RequestMapping в InsertController класс.

Итак, теперь ваш контроллер обработает запрос, добавит значение модели и передаст его index.jsp.

Ниже я разместил полный код.

InsertController

import SpringApp.DAO.People; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import java.util.Map; 
@Controller 
@RequestMapping({"/", "/apptest.htm"}) 
/** 
* 
* @author ROHAN 
*/ 
public class InsertController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String viewRegistration(Map<String, Object> model) { 
     People userForm = new People(); 
     model.put("userForm", userForm); 
     return "index"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String processRegistration(@ModelAttribute(value="userForm") People people, 
             Map<String, Object> model) { 
     model.put("name",people.getName()); 
     model.put("city",people.getCity()); 
     return "test"; 
    } 
} 

web.xml

<web-app id="WebApp_ID" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <display-name>Spring MVC</display-name> 
    <description>Spring MVC</description> 

    <!-- For web context --> 
    <servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     WEB-INF/application-context.xml 
    </param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!--<welcome-file-list>--> 
    <!--<welcome-file></welcome-file>--> 
    <!--</welcome-file-list>--> 
</web-app> 
+0

вы сэр только что сделали мой день !!! У меня есть один вопрос, предполагая, что у меня нет никакого индексного файла, скорее это эквивалентно «demo.jsp». Затем, когда я запускаю проект, какой файл откроется? Просто подумал сэр. Спасибо :) –

+0

Это зависит от того, какой вид вы возвращаете из своего контроллера –

0

это выглядит как ваш model attribute не свяжите с request, сделайте подменю в вашем index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
    <!DOCTYPE html> 
    <html> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
      <title>JSP Page</title> 
     </head> 
     <body> 
      <form:form action="apptest.htm" modelAttribute="userForm" method="POST"> 
       Name:<form:input path="name" /> 
       <br> 
       Age:<form:input path="age" /> 
       <br> 
       City:<form:input path="city" /> 
       <br> 
       <input type="submit" value="Submit"> 
       <br> 
      </form:form> 

     </body> 
    </html> 

Теперь убедитесь, что у вас есть test.jsp, имеющий modelAttribute от Peoplebean, иначе это снова вызовет ошибку.

+0

Я сделал изменение, которое вы просили, но проблема не устранена. Я добавил код для test.jsp в свой вопрос для вашей справки. –

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

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