Статьи

Изучение Spring Controller с Spring Form Tag

В предыдущей статье я показал вам, как обрабатывать простую 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;
 
@Controller
public 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 также помогает локализовать текст сообщения об ошибке и т. Д. Вы можете прочитать больше в их справочном документе.

Ссылка: Изучение Spring Controller с Spring Form Tag от нашего партнера JCG Земьяна Дена в блоге A Programmer’s Journal .