2015-08-26 2 views
0

Мне нужны данные отображения в jsp с контроллером, у меня есть List с информацией для печати в jsp.Как отображать информацию на странице jsp с контроллера Spring MVC

При запуске этого кода я получаю ошибку:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [entities.Pupil]: No default constructor found; nested exception is java.lang.NoSuchMethodException: entities.Pupil.()

Контроллер

@Controller 
    public class PupilController { 
    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public List add(@ModelAttribute Pupil pupil){ 
     System.out.println(pupil.toString()); 
     List<Pupil> pupilList = new ArrayList<Pupil>(); 
     pupilList.add(new Pupil(1, "Name", "Last", 13)); 
     pupilList.add(new Pupil(2, "Name", "Last", 55)); 
     pupilList.add(new Pupil(3, "Name", "Last", 41)); 
     return pupilList; 
    } 
    } 

index.jsp

<body> 
    <h2>Hello World!</h2> 
    <a href="hello">click</a> 
    <form action="/add" method="post"> 
     <p>1:</p><input type="text" name="one"> 
     <p>2:</p><input type="text" name="two"> 
     <p>3:</p><input type="text" name="three"> 
     <p>4:</p><input type="text" name="four"> 
     <input type="submit" value="button"> 
    </form> 
</body> 

add.jsp

<body> 
    <h3>This is add.jsp</h3> 
    <table> 
     <thead> 
     <tr> 
      <td>ID</td> 
      <td>NAME</td> 
      <td>LAST</td> 
      <td>YEAR</td> 
     </tr> 
     </thead> 
     <tbody> 
     <c:forEach items="${pupilList}" var="tester"> 
      <tr> 
       <td>${tester.id}</td> 
       <td>${tester.name}</td> 
       <td>${tester.last}</td> 
       <td>${tester.year}</td> 
      </tr> 
     </c:forEach> 
     </tbody> 
    </table> 
</body> 
+0

сделать конструктор по умолчанию в вашем классе 'Pupil'. –

+0

О, я создаю конструктор по умолчанию в классе 'Pupil', но на странице jsp не отображаются данные из' pupilList' только блока 'thead' –

+0

Изменить тип возвращаемого метода контроллера из' List' в 'List ' –

ответ

0

сделать ниже изменения в вашем коде.

  1. Добавить default constructor в ваш класс.
  2. Добавить тег lib в ваш файл jsp. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. Включить запись pom для JSTL.

    <dependency> 
        <groupId>javax.servlet.jsp.jstl</groupId> 
        <artifactId>jstl</artifactId> 
        <version>1.2</version> 
    </dependency> 
    
0

Попробуйте

@RequestMapping(value = "/add", method = RequestMethod.POST) 
    public ModelAndView add(@ModelAttribute Pupil pupil){ 
     System.out.println(pupil.toString()); 
     List<Pupil> pupilList = new ArrayList<Pupil>(); 
     pupilList.add(new Pupil(1, "Name", "Last", 13)); 
     pupilList.add(new Pupil(2, "Name", "Last", 55)); 
     pupilList.add(new Pupil(3, "Name", "Last", 41)); 
     ModelAndView view = new ModelAndView(); 
     view.addObject(pupilList); 
     return view; 
    } 

Или

@RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String add(@ModelAttribute Pupil pupil, ModelMap model){ 
     System.out.println(pupil.toString()); 
     List<Pupil> pupilList = new ArrayList<Pupil>(); 
     pupilList.add(new Pupil(1, "Name", "Last", 13)); 
     pupilList.add(new Pupil(2, "Name", "Last", 55)); 
     pupilList.add(new Pupil(3, "Name", "Last", 41)); 
     model.put("pupilList", pupilList); 
     return "page-name"; 
    } 
+0

как получить информацию о jsp? если использовать это решение в jsp нужно использовать 'getAttribute'? –

+0

@BohdanOlehovich, эти оба подхода такие же, как ваши. Единственное различие заключается в том, что в случае вашего подхода вы можете использовать 'add.jsp', где, как и в этих подходах, вы можете указать другое имя jsp. –

+0

Нет, вам не нужно использовать 'getAttribute' http://docs.spring.io/spring-framework/docs/3.0.x/reference/mvc.html#mvc-ann-requestparam – ParagFlume