В предыдущей статье я показал вам, как обрабатывать простую HTML-форму с помощью контроллера Spring. Но более мощный способ обработки формы заключается в использовании @ModelAttribute Spring и его тегов Spring spring:form . Я покажу вам, как это начать, изменив настройку проекта последней статьи. Мы просто изменим форму комментария и контроллер, чтобы использовать эту функцию.
В том же проекте измените файл представления src/webapp/comment.jsp на этот:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags/form" %><spring:form modelAttribute="comment"> <table> <tr> <td><spring:textarea path="text" rows="20" cols="80"/></td> </tr> <tr> <td colspan="2"> <input type="submit" value="Post"/> </td> </tr> </table></spring:form> |
В этом представлении теперь используется тег spring:form для отображения формы комментария вместо обычного HTML. Я показал вам только один элемент, но библиотека тегов spring:form также содержит все соответствующие элементы HTML-формы, которые помогают вам быстро визуализировать форму с привязанными данными. Это автоматически вызывает CommentController при CommentController . Нам нужно изменить это, чтобы захватить форму.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package springweb.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;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 org.springframework.web.servlet.ModelAndView;import springweb.data.Comment;import springweb.data.CommentService;import javax.servlet.http.HttpServletRequest;import java.util.List;@Controllerpublic class CommentController { @Autowired private CommentService commentService; @RequestMapping(value="/comments") public ModelAndView comments() { List<Comment> comments = commentService.findComments(); ModelAndView result = new ModelAndView("/comments"); result.addObject("comments", comments); return result; } @ModelAttribute("comment") public Comment createFormModelAttribute() { return Comment.create(""); } @RequestMapping(value="/comment") public String comment() { return "comment"; } @RequestMapping(value="/comment", method = RequestMethod.POST) public ModelAndView postComment(HttpServletRequest req, @ModelAttribute("comment") Comment comment) { String fromUrl = req.getRequestURI(); String user = req.getRemoteUser(); String userIp = req.getRemoteAddr(); comment.setFromUserIp(userIp); comment.setFromUser(user); comment.setFromUrl(fromUrl); commentService.insert(comment); ModelAndView result = new ModelAndView("comment-posted"); result.addObject("comment", comment); return result; }} |
Разница в этом контроллере по сравнению со старым заключается в том, что мы использовали @ModelAttribute с объектом form (или Spring называет его объектом command ). Мы можем назвать его, который я назвал здесь comment . Это просто класс Java POJO, ничего особенного. Но он используется для захвата всех входных данных формы и их передачи в контроллер, что называется привязкой данных. Обратите внимание, что он будет createFormModelAttribute() методом createFormModelAttribute() когда вы сначала запросите представление формы. Если вы предварительно заполнили текст pojo, то он автоматически отобразится в форме! Когда пользователь отправляет данные, контроллер обрабатывает postComment() методом postComment() , а объект формы снова заполняется новым вводом формы для обработки. Это позволяет вам работать с формой в чистом стиле Object, и во многих отношениях она короче и чище по сравнению с простой HTML-формой.
Есть много для обработки форм Spring MVC. Одна из мощных функций заключается в том, что она может помочь вам организовать валидацию объекта form и собрать сообщения об ошибках. Spring также помогает локализовать текст сообщения об ошибке и т. Д. Вы можете прочитать больше в их справочном документе.