使用Spring Form标签探索Spring Controller

本文介绍如何利用Spring的Form标签增强Spring Controller处理HTML表单的能力。通过修改项目,将视图文件更新为使用Spring Form标签,实现数据绑定和对象验证,从而简化表单提交和控制器交互。Spring MVC的这种功能有助于组织验证和错误消息的本地化。
摘要由CSDN通过智能技术生成

在上一篇文章中 ,我向您展示了如何使用Spring控制器处理纯HTML表单。 但是处理表单的更强大的方法是使用Spring的@ModelAttribute及其spring:form标签。 我将向您展示如何通过修改上一篇文章的项目设置从这里开始。 我们将简单地修改Comment表单和控制器以使用此功能。

在同一项目中,将src/webapp/comment.jsp视图文件修改为:

<%@ 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 。 我们将需要对其进行修改以捕获表单。

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类,没什么特别的。 但是它用于捕获所有表单输入,然后传递给Controller,这称为数据绑定。 请注意,当您首先请求表单视图时,它将通过createFormModelAttribute()方法进行实例化。 如果您用文本预先填充了pojo,它将自动以表格形式显示! 当用户提交时,控制器将使用postComment()方法进行处理,并且再次使用新的表单输入来填充表单对象以进行处理。 这使您可以使用纯对象样式的表单,并且在许多方面,与纯HTML表单相比,它更短,更简洁。

Spring MVC表单处理有很多。 一种强大的功能是它可以帮助您组织form对象验证并收集错误消息。 Spring还可以帮助您本地化错误消息文本等。您可以阅读有关其参考文档的更多信息。


翻译自: https://www.javacodegeeks.com/2013/11/exploring-spring-controller-with-spring-form-tag.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值