2014-05-15 14 views
6
ZIP

Dự án: Ứng dụng web http://goo.gl/ddhLg5Spring MVC ứng dụng web: Không có constructor mặc định tìm thấy


mùa xuân không thể được thực hiện cho HTTP Status 500 lỗi. Nó cũng viết ra rằng không có constructor mặc định được tìm thấy cho DSLR nhưng trên thực tế có một constructor mặc định. Có lẽ nó đã làm với bối cảnh ứng dụng hoặc cách đậu của tôi tuyên bố? Lý do ứng dụng của tôi không thể bắt đầu là gì?

DSLR:

package main.java.com.springapp.mvc.model; 

    public class DSLR { 

    public DSLR() { 
    } 
    public void init() {} 

    private int dslrId; 
    private String model; 
    private int price; 
    private String description; 

    public int getDslrId() { 
     return dslrId; 
    } 

    public void setDslrId(int dslrId) { 
     this.dslrId = dslrId; 
    } 

    public String getModel() { 
     return model; 
    } 

    public void setModel(String model) { 
     this.model = model; 
    } 

    public int getPrice() { 
     return price; 
    } 

    public void setPrice(int price) { 
     this.price = price; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Override 
    public String toString() { 
     return "DSLR [dslr=" + dslrId + ", model=" + model 
       + ", price=" + price+ ", description=" + description+"]"; 
    } 
} 

web.xml

<web-app 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 Application</display-name> 

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

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
</web-app> 

DSLRServletController-servlet.xml:

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

    <context:component-scan base-package="main.java.com.springapp.mvc" > 
     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
    </context:component-scan> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 


    <bean name="s" class="main.java.com.springapp.mvc.controller.DSLRServletController"> 
     <property name="dslrDAO" ref="dslrDAO" /> 
     <property name="DSLR" ref="DSLR" /> 
    </bean> 
    <bean id="dslrDAO" class="main.java.com.springapp.mvc.dao.DSLRDAO"> 

    </bean> 
    <bean id="DSLR" class="main.java.com.springapp.mvc.model.DSLR"> 

    </bean> 


</beans> 

MVC-phối-servlet.xml

<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" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="main.java.com.springapp.mvc"/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

</beans> 

LỖI:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]: No default constructor found; nested exception is java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 

type Exception report 

message Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]: No default constructor found; nested exception is java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]: No default constructor found; nested exception is java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:927) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]: No default constructor found; nested exception is java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:108) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:770) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:363) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 
    java.lang.Class.getConstructor0(Class.java:2810) 
    java.lang.Class.getDeclaredConstructor(Class.java:2053) 
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:770) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:363) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 logs. 

điều khiển chính lớp:

package main.java.com.springapp.mvc.controller; 

import main.java.com.springapp.mvc.dao.DSLRDAO; 
import main.java.com.springapp.mvc.model.DSLR; 
import main.java.com.springapp.mvc.pckg.DSLRForm; 
import main.java.com.springapp.mvc.pckg.DSLRValidaor; 
import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.io.Serializable; 
import java.util.*; 

@Controller 
public class DSLRServletController extends HttpServlet { 
    static Logger logger = Logger.getLogger(DSLRServletController.class); 

    private DSLR DSLR; 
    private DSLRDAO dslrDAO; 
    private DSLR dslr; 

    /* request.setCharacterEncoding("UTF-8"); 
    response.setContentType("text/html; charset=utf-8"); 
    List list = getActions(request, response); 
    response.setContentType("text/html; charset=UTF-8");*/ 

    //@Autowired ??? 
    public DSLRServletController() { 
     this.dslrDAO = new DSLRDAO(); 
    } 

    public void init() {logger.error("DSLRServlet.init(): just started"); } 
    /* 
      /s         GET 
      /s?id=1        GET 
      /s?action=save      POST 
      /dslrservice?id=1&tm=<timestamp>  GET 
    */ 
@RequestMapping(value = "/s", method = RequestMethod.GET) 
public String showHTMLResponse(@ModelAttribute("dslrs") DSLR dslrs[], 
           @ModelAttribute("dslr") DSLR dslr, 
           @ModelAttribute("dslrErrors") HashMap dslrErrors, 
           @ModelAttribute ("dslrform") DSLRForm dslrForm, 
           @RequestParam("id") String paramId, 
           @RequestParam("action") String paramAction, 
           Model model){ 

    if(paramId == null || paramId.equals("")){ 
     //show_all_dslrs 
     dslrs = getAllDslrs(); // DSLR adslrs[] -> to MODEL; 
     return "dslrs"; 
    }else{ 
     //show_this_dslr; 
     HashMap<String,Object> dslrHashMap = getDSLRById(paramId); 
     dslr = (DSLR) dslrHashMap.get("dslr"); 
     dslrForm = (DSLRForm)dslrHashMap.get("dslrForm"); 
     dslrErrors = (HashMap)dslrHashMap.get("dslrErrors"); 

      if(dslr != null){ 
//    getServletConfig().getServletContext().getRequestDispatcher("/dslr.jsp").forward(request, response); 
       return "dslr"; 
      } 

      else{ 
       return "error"; 
      } 


    } 
} 

@RequestMapping(value = "/s", method = RequestMethod.POST) 
public String showHTMLResponsePOST(@ModelAttribute("dslrs") DSLR dslrs[], 
           @ModelAttribute("dslrErrors") HashMap<?,?> dslrErrors, 
           @ModelAttribute ("dslrform") DSLRForm dslrForm, 

           @RequestParam("id") String paramId, 
           @RequestParam("action") String paramAction, 
           @RequestParam("dslr_model") String paramModel, 
           @RequestParam("price") String paramPrice, 
           @RequestParam("description") String paramDescription, 
           Model model){ 
    int iStatusCode = 0; 
    if(paramAction.equals("save")) 
     iStatusCode = saveDSLR(paramId, paramModel, paramPrice, paramDescription, dslrErrors, dslrForm); // POST 

    return "dslrs"; 

} 

    private int saveDSLR(String paramId, 
         String paramModel, 
         String paramPrice, 
         String paramDescription, 
         HashMap<?,?> context_dslrErrors, 
         DSLRForm context_dslrForm 
         ) { 
     int byte0 = 1; 
     try { 

      DSLRValidaor dslrValidaor = new DSLRValidaor(); 

      DSLRForm dslrForm = new DSLRForm(); 
      dslrForm.setDslrId(paramId); 
      dslrForm.setModel(paramModel); 
      dslrForm.setPrice(paramPrice); 
      dslrForm.setDescription(paramDescription); 

      HashMap hashmap = dslrValidaor.Validate(dslrForm); 
      if(hashmap.size() > 0) { 
       context_dslrForm = dslrForm; 
       context_dslrErrors = hashmap; 
       byte0 = -1; 
      } else{ 
       DSLRDAO planedao = new DSLRDAO(); 
       DSLR dslr = new DSLR(); 
       dslr.setDslrId(Integer.parseInt(paramId)); 
       dslr.setModel(paramModel); 
       dslr.setPrice(Integer.parseInt(paramPrice)); 
       dslr.setDescription(paramDescription); 
       planedao.update(dslr); 
      } 
     } 
     catch(Exception exception) 
     { 
      logger.error((new StringBuilder()).append("DSLRServlet.saveDSLR():").append(exception.getMessage()).toString()); 
      byte0 = -1; 
     } 
     return byte0; 

    } 

    private DSLR[] getAllDslrs(){ 
     DSLR adslrs[] = null; 
     try 
     { 
      DSLRDAO DSLRDAO = new DSLRDAO(); 
      adslrs = (DSLR[])DSLRDAO.findAll(); 
     } 
     catch(Exception exception) 
     { 
      logger.error((new StringBuilder()).append("PlaneServlet.getAllPlanes():").append(exception.getMessage()).toString()); 
     } 
//  request.setAttribute("dslrs", adslrs); 
     return adslrs; 
    } 

    private HashMap<String, Object> getDSLRById(String s) 
    { 
     HashMap<String,Object> map = new HashMap<String, Object>(); 

     DSLR dslr = null; 
     try { 
      int i = Integer.parseInt(s); 
      DSLRDAO DSLRDAO = new DSLRDAO(); 
      dslr = (DSLR)DSLRDAO.findById(i); 

      DSLRForm dslrForm = new DSLRForm(); 
      dslrForm.setDslrId(Integer.toString(dslr.getDslrId())); 
      dslrForm.setModel(dslr.getModel()); 
      dslrForm.setPrice(Integer.toString(dslr.getPrice())); 
      dslrForm.setDescription(dslr.getDescription()); 


      map.put("dslr", dslr); 
      map.put("dslrform", dslrForm); 
      map.put("dslrErrors", new HashMap()); 
     } 
     catch(Exception exception) 
     { 
      logger.error((new StringBuilder()).append("DSLRServlet.getDSLRById():").append(exception.getMessage()).toString()); 
     } 
     return map; 
    } 

    public void setDslrDAO(DSLRDAO dslrDAO) { 
     this.dslrDAO = dslrDAO; 
    } 

    public DSLRDAO getDslrDAO() { 
     return dslrDAO; 
    } 

    public void setDSLR(main.java.com.springapp.mvc.model.DSLR DSLR) { 
     dslr = DSLR; 
    } 

    public main.java.com.springapp.mvc.model.DSLR getDSLR() { 
     return dslr; 
    } 
} 

UPDATE1:

mới MVC-phối-servlet.xml:

<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" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="main.java.com.springapp.mvc" > 
     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
    </context:component-scan> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

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

Và @Autowired được đưa vào DSLRServletController:

@Autowired 
    public DSLRServletController() { 
     this.dslrDAO = new DSLRDAO(); 
    } 

Lỗi:

exception 

javax.servlet.ServletException: Servlet.init() for servlet mvc-dispatcher threw exception 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    java.lang.Thread.run(Thread.java:744) 
root cause 

java.lang.IllegalStateException: Autowired annotation requires at least one argument: public main.java.com.springapp.mvc.controller.DSLRServletController() 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:976) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 
    javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    java.lang.Thread.run(Thread.java:744) 

Vì một số lý do, 2 lỗi xuất hiện. Điều gì cần được thay đổi để thiết lập dự án một cách chính xác?


UPDATE3

mới MVC-phối-servlet.xml:

<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" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="main.java.com.springapp.mvc" > 
     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
    </context:component-scan> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
    <bean id="DSLR" class="main.java.com.springapp.mvc.model.DSLR" /> 
</beans> 

Ngoài @Autowired thêm vào trong UPDATE1, một số khác được thêm vào (trong DSLRServletController):

@Autowired 
    public void setDSLR(DSLR DSLR) { 
     dslr = DSLR; 
    } 

UPDATE4:

Trở lại lỗi gốc: Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]

Tôi đang bối rối. Có gì sai?

+0

Làm thế nào lớp 'DSLR' thực hiện' Serializable'? –

+1

Tôi không biết, có lẽ là không. –

+0

Nó không, và tôi không thể thấy lý do tại sao nó nên/nên. –

Trả lời

4

Bên trong phương pháp điều khiển của bạn, bạn đã sử dụng một tham số như mảng như dưới đây

@ModelAttribute("dslrs") DSLR dslrs[] 

nên sử dụng bộ sưu tập như danh sách thay vì

@ModelAttribute("dslrs") ArrayList<DSLR> dslrs 
+0

Sau khi tôi đã thực hiện các thay đổi như bạn đã đề xuất, bây giờ tôi đang có 'org.springframework.beans.BeanInstantiationException: Không thể khởi tạo lớp bean [java.util.List]: Lớp được chỉ định là một giao diện'. Chuyện gì vậy? –

+2

oh ok đã nhận nó..make nó arraylist thay vì danh sách –

+0

Tuyệt vời, cảm ơn nhiều! –

1

Tôi lưu ý một chút dự phòng. Chính bản thân nó không nên gây ra những vấn đề này, nhưng có thể đáng để khám phá:

Bạn sử dụng <context:component-scan base-package="main.java.com.springapp.mvc" >, có vẻ như bạn định tải @Controller -annotated DSLRServletController của mình. Nếu đúng như vậy, thì không cần khai báo bean có tên là s trong cấu hình XML của bạn. Bạn có thể chỉ cần đặt @Autowired vào bộ định vị thuộc tính bean. Ngoài ra, bạn có thể loại bỏ các <context:component-scan> từ cấu hình XML của bạn, và tin tưởng của bạn delcaration của bộ điều khiển là đủ.

Ngoài ra, mặc dù nó có thể không liên quan. Nếu bạn tải nội dung nào đó bằng cách sử dụng @Controller và quét chú thích đường dẫn, bạn không cần triển khai tất cả HttpServlet. Điểm của @Controller và Spring MVC là để làm cho nó để bộ điều khiển của bạn có thể được Plain Old Java Objects (POJOs).

Quan trọng nhất, có vẻ như web.xml của bạn chỉ gây ra mvc-dispatcher-servlet.xml để được tải (bằng cách sử dụng tên servlet làm gợi ý) và không có gì đang tải DSLRServletController-servlet.xml. Hậu quả của việc này là <context:component-scan base-package="main.java.com.springapp.mvc"/> của bạn đang khiến bộ điều khiển được tải, nhưng không có thuộc tính nào của nó được đặt. Để làm sạch thêm hệ thống của bạn, hãy di chuyển DSLRServletController-servlet.xml của bạn sang mvc-dispatcher-servlet.xml để bối cảnh mùa xuân của bạn được định cấu hình từ một cấu hình duy nhất.

+1

Như bạn đã đề xuất, tôi đã tập hợp 2 tệp cấu hình XML vào 'mvc-dispatcher-servlet.xml'. Điều gì chính xác trong mã đó là 'thuộc tính bean setters' trong đó' @ Autowired' nên được đặt ở đâu? Tôi đã xóa 'mở rộng HttpServlet' và nhận 2 lỗi ... –

+0

Sẽ hữu ích nếu tôi đính kèm mã zip của dự án? –

+1

Bạn sắp hoàn tất! Về bản cập nhật của bạn, bây giờ bạn đã xác định được 'InternalResourceViewResolver'. Bạn có thể xóa một trong số đó. Thứ hai, '@ Autowired' có nghĩa là mùa xuân có nghĩa vụ phải xem xét phương pháp, và sau đó đoán những gì đậu nên được tiêm ở đó. Với ý nghĩ đó, bạn cần 'public void setDSLR' thành' @ Autowired'. Một khi bạn làm điều đó, ngoại lệ tiếp theo bạn sẽ nhận được là không có bean ứng cử viên của loại 'DSLR' để tiêm. Tại sao? Bởi vì không có hạt của 'DSLR' được xác định trong xml hiện tại của bạn. Bạn có thể khắc phục điều này bằng cách giới thiệu một hạt 'DSLR' trong xml của bạn giống như ban đầu bạn đã có trước đây. –

4

này được thông báo lỗi bạn sẽ nhận được nếu DSLR không có constructor mặc định:

java.lang.NoSuchMethodException: main.java.com.springapp.mvc.model.DSLR.<init>() 

Bây giờ so sánh này để thông báo lỗi của bạn:

java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>() 

Bạn có nhận thấy sự khác biệt? [L? Lỗi có nghĩa là bạn không thể khởi tạo một mảng với một hàm tạo, vì một mảng không có hàm tạo. Đó là lý do tại sao bạn không thể sử dụng một mảng làm tham số cho phương thức điều khiển của bạn. Ít nhất không phải như vậy. Sử dụng bộ sưu tập và bạn ổn.

Các vấn đề liên quan