- 浏览: 270693 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hongxingyaru_d5b032:
但是其中“这个Accept和Request Headers中的 ...
基于Spring MVC的Web应用开发(7) - Headers -
hongxingyaru_d5b032:
学习到了,感谢分享!
基于Spring MVC的Web应用开发(7) - Headers -
bo_hai:
总结的不错。
基于Spring MVC的Web应用开发(7) - Headers -
fendou3754:
那你也说一下spring-asm重新打包以后的源码怎么获取,尽 ...
spring将spring-asm重新打包原因 -
di1984HIT:
谢谢啊~学习了~~
JMS、AMQP实例讲解
本节介绍SpringMVC中的表单,demo演示访问一个表单提交页面,填写表单的内容后使用jQuery的Ajax提交表单,将返回的文本信息显示出来。
记得在Struts1中有个FormBean的东西封装表单内容,在SpringMVC中也有,只不过SpringMVC更松耦合,只要写一个POJO就可以了,而不需要继承框架关联的类,看一下这个FormBean(只列出了主要属性):
public class FormBean { @NotEmpty private String name; @Min(21) private int age; @DateTimeFormat(iso=ISO.DATE) @Past private Date birthDate; @MaskFormat("(###) ###-####") private String phone; @NumberFormat(pattern="$###,###.00") private BigDecimal currency; @NumberFormat(style=Style.PERCENT) private BigDecimal percent; private InquiryType inquiry; private String inquiryDetails; private boolean subscribeNewsletter; private Map<String, String> additionalInfo; ... }
需要一个Controller,FormController:
package org.springframework.samples.mvc.form; import javax.validation.Valid; import org.springframework.mvc.extensions.ajax.AjaxUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; 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.SessionAttributes; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @RequestMapping("/form") @SessionAttributes("formBean") public class FormController { // Invoked on every request @ModelAttribute public void ajaxAttribute(WebRequest request, Model model) { model.addAttribute("ajaxRequest", AjaxUtils.isAjaxRequest(request)); } // Invoked initially to create the "form" attribute // Once created the "form" attribute comes from the HTTP session (see @SessionAttributes) @ModelAttribute("formBean") public FormBean createFormBean() { return new FormBean(); } @RequestMapping(method=RequestMethod.GET) public void form() { } @RequestMapping(method=RequestMethod.POST) public String processSubmit(@Valid FormBean formBean, BindingResult result, @ModelAttribute("ajaxRequest") boolean ajaxRequest, Model model, RedirectAttributes redirectAttrs) { if (result.hasErrors()) { return null; } // Typically you would save to a db and clear the "form" attribute from the session // via SessionStatus.setCompleted(). For the demo we leave it in the session. String message = "Form submitted successfully. Bound " + formBean; // Success response handling if (ajaxRequest) { // prepare model for rendering success message in this request model.addAttribute("message", message); return null; } else { // store a success message for rendering on the next request after redirect // redirect back to the form to render the success message along with newly bound values redirectAttrs.addFlashAttribute("message", message); return "redirect:/form"; } } }
FormController只有一个@RequestMapping,通过GET,POST来区分是访问表单页面(GET),还是提交表单(POST)。在这个类中有:
@ModelAttribute("formBean") public FormBean createFormBean() { return new FormBean(); }
它表示访问"http://localhost:8080/web/form/"时,就初始化一个叫formBean名字的属性放在Model中。在类的开头有:
@SessionAttributes("formBean")
它表示Model中的这个formBean在session的范围内有效,想一下,session是跟浏览器窗口关联的,窗口关闭,session就失效,所以每次打开一个新的表单页面都会生成一个新的formBean,另外填写完表单内容以POST方式提交后,formBean会根据提交的参数自动设置FormBean的值。
@ModelAttribute public void ajaxAttribute(WebRequest request, Model model) { model.addAttribute("ajaxRequest", AjaxUtils.isAjaxRequest(request)); }
该配置会导致每次访问"http://localhost:8080/web/form/",都会设置一个ajaxRequest值(因为没有象formBean一样设置ajaxRequest的范围,默认的范围为Request级,每次请求都执行)。之前说过填好表单后通过jQuery的Ajax提交表单,通过这个配置,就知道请求是否是Ajax请求。
@RequestMapping(method=RequestMethod.GET) public void form() { }
访问"http://localhost:8080/web/form/",返回到"webapp/WEB-INF/views/form.jsp"。
@RequestMapping(method=RequestMethod.POST) public String processSubmit(@Valid FormBean formBean, BindingResult result, @ModelAttribute("ajaxRequest") boolean ajaxRequest, Model model, RedirectAttributes redirectAttrs) { if (result.hasErrors()) { return null; } // Typically you would save to a db and clear the "form" attribute from the session // via SessionStatus.setCompleted(). For the demo we leave it in the session. String message = "Form submitted successfully. Bound " + formBean; // Success response handling if (ajaxRequest) { // prepare model for rendering success message in this request model.addAttribute("message", message); return null; } else { // store a success message for rendering on the next request after redirect // redirect back to the form to render the success message along with newly bound values redirectAttrs.addFlashAttribute("message", message); return "redirect:/form"; } }
processSubmit第一个参数formBean封装了页面提交的表单参数,注意到它前面有一个@Valid,因此有第二个参数BindingResult result, 该参数可以知道表单是否验证通过。第三个参数获取Model中的属性值"ajaxRequest",在方法体中,判断ajaxRequest,如果是,将返回"webapp/WEB-INF/views/form.jsp",如果不是,将它重定向到一个jsp,当然,这个条件在本例子中没有使用到。
最后看看非常复杂的form.jsp,该jsp使用了大量的SpringMVC的标签:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ page session="false" %> <c:if test="${!ajaxRequest}"> <html> <head> <title>forms | mvc-showcase</title> <link href="<c:url value="/resources/form.css" />" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="<c:url value="/resources/jquery/1.6/jquery.js" />"></script> </head> <body> </c:if> <div id="formsContent"> <h2>Forms</h2> <p> See the <code>org.springframework.samples.mvc.form</code> package for the @Controller code </p> <form:form id="form" method="post" modelAttribute="formBean" cssClass="cleanform"> <div class="header"> <h2>Form</h2> <c:if test="${not empty message}"> <div id="message" class="success">${message}</div> </c:if> <s:bind path="*"> <c:if test="${status.error}"> <div id="message" class="error">Form has errors</div> </c:if> </s:bind> </div> <fieldset> <legend>Personal Info</legend> <form:label path="name"> Name <form:errors path="name" cssClass="error" /> </form:label> <form:input path="name" /> <form:label path="age"> Age <form:errors path="age" cssClass="error" /> </form:label> <form:input path="age" /> <form:label path="birthDate"> Birth Date (in form yyyy-mm-dd) <form:errors path="birthDate" cssClass="error" /> </form:label> <form:input path="birthDate" /> <form:label path="phone"> Phone (in form (###) ###-####) <form:errors path="phone" cssClass="error" /> </form:label> <form:input path="phone" /> <form:label path="currency"> Currency (in form $#.##) <form:errors path="currency" cssClass="error" /> </form:label> <form:input path="currency" /> <form:label path="percent"> Percentage (in form ##%) <form:errors path="percent" cssClass="error" /> </form:label> <form:input path="percent" /> </fieldset> <fieldset> <legend>Inquiry</legend> <form:label path="inquiry"> Type (select one) </form:label> <form:select path="inquiry"> <form:option value="comment">Comment</form:option> <form:option value="feedback">Feedback</form:option> <form:option value="suggestion">Suggestion</form:option> </form:select> <form:label path="inquiryDetails"> Details </form:label> <form:textarea path="inquiryDetails" /> </fieldset> <fieldset class="checkbox"> <legend>Request Additional Info</legend> <label><form:checkbox path="additionalInfo[mvc]" value="true" />on Spring MVC</label> <label><form:checkbox path="additionalInfo[java]" value="true" />on Java (4-ever)</label> </fieldset> <fieldset class="radio"> <legend>Subscribe to Newsletter?</legend> <label><form:radiobutton path="subscribeNewsletter" value="true" />Yes</label> <label><form:radiobutton path="subscribeNewsletter" value="false" /> No</label> </fieldset> <p><button type="submit">Submit</button></p> </form:form> <script type="text/javascript"> $(document).ready(function() { $("#form").submit(function() { $.post($(this).attr("action"), $(this).serialize(), function(html) { $("#formsContent").replaceWith(html); $('html, body').animate({ scrollTop: $("#message").offset().top }, 500); }); return false; }); }); </script> </div> <c:if test="${!ajaxRequest}"> </body> </html> </c:if>
发表评论
-
《Pro Spring Integration》读书笔记
2012-06-02 11:30 0a -
基于Spring MVC的Web应用开发(11) - Views
2012-03-31 13:13 8799在FileUpload一文中,我们初步了解了SpringMVC ... -
基于Spring MVC的Web应用开发(10) - Validation
2012-03-31 11:36 3173本文介绍SpringMVC的验证(validation),在C ... -
基于Spring MVC的Web应用开发(9) - Exceptions
2012-03-31 10:55 1768本文介绍SpringMVC中的异常处理,@Controller ... -
基于Spring MVC的Web应用开发(8) - Convert
2012-03-31 09:25 3679本文介绍SpringMVC中的Convert,Convert是 ... -
基于Spring MVC的Web应用开发(7) - Headers
2012-03-30 15:01 27360本文接上一篇文章,介 ... -
基于Spring MVC的Web应用开发(6) - Response
2012-03-30 10:56 36096本文讲解Spring MVC的Response,深入了解一下@ ... -
基于Spring MVC的Web应用开发(5) - Redirect
2012-03-26 15:10 17537本文介绍Spring MVC中的重定向(Redirect),先 ... -
基于Spring MVC的Web应用开发(4) - FileUpload
2012-03-20 21:17 35759上一篇文章介绍了Spring MVC如何处理静态资源文件,本文 ... -
基于Spring MVC的Web应用开发(3) - Resources
2012-03-20 16:22 6614上一篇介绍了在基于Spring MVC的Web项目中加入日志, ... -
基于Spring MVC的Web应用开发(2) - Log
2012-03-19 11:55 3591上一篇文章我们使用SpringMVC搭建了一个简单WEB项目 ... -
基于Spring MVC的Web应用开发(1) - HelloWorld
2012-03-16 07:21 18285MVC架构 MVC是模型(model),视图(view),控 ... -
spring-oxm中unmashaller疑似bug
2012-03-08 10:21 2558spring-integration中测试XML Transf ... -
spring将spring-asm重新打包原因
2012-03-06 13:41 8280以前就发现通过eclipse上面的m2e插件不能将spring ... -
Spring底层使用SAX解析XML配置文件
2012-02-29 01:28 6131最近在研究Spring源代码,在梳理spring-beans时 ... -
在Spring 3.1.0 M2中配置Hibernate事务失效?
2011-10-22 00:38 2187SpringSource与2011年6月8号发布了Spring ...
相关推荐
- **CommonsMultipartResolver**:Spring MVC通过集成Apache Commons FileUpload库,提供了处理multipart/form-data类型请求的能力。CommonsMultipartFile对象可以用来封装上传的文件。 - **@RequestParam**:在...
Ajax-Spring-MVC-CRUD-form-submit-and-ajax.zip,spring mvc crud应用程序(springmvc、hibernate 4.x、bootstrap 3.x、jquery、mysql),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json...
《Spring MVC 3.0.5.RELEASE:构建高效Web应用程序的关键组件》 Spring MVC是Spring框架的一个核心模块,专...通过理解和掌握这些知识点,开发者可以充分利用Spring MVC的强大能力,提升Web应用的开发体验和整体性能。
在Web开发领域,Spring Web MVC作为一款强大的MVC框架,被广泛应用于构建企业级的Web应用。它提供了模型(model)、视图(view)和控制器(controller)的分离,使得开发者能够更好地组织代码,提高可维护性和可扩展性。而...
《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)模式...通过对这个项目的深入研究,开发者能够掌握Spring MVC的精髓,提升Web应用开发的效率和质量。
14. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 15. 16. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> 17. <bean class="org....
【Spring的Web MVC构架模式】是Spring框架中的核心组件,用于构建Web应用程序。Spring MVC设计的核心是一个称为DispatcherServlet的前端控制器,它负责接收HTTP请求并分发到相应的处理器。这种架构模式允许开发者将...
在Java世界里,Spring框架无疑是企业级应用开发的首选。它以其强大的功能、灵活的设计以及丰富的生态系统赢得了广大开发者的心。Spring框架的核心之一就是Spring Web模块,这个模块为构建Web应用程序提供了坚实的...
Spring的Web MVC架构模式是一种在Java开发中广泛使用的轻量级框架,用于构建高效、可测试和可维护的Web应用程序。该框架的核心是DispatcherServlet,它作为中央调度器,负责接收HTTP请求并将其转发给合适的处理器。...
Spring框架是Java开发中的一个核心组件,尤其在构建MVC(模型-视图-控制器)架构的Web应用时。Spring Security可以与Spring框架无缝集成,为用户认证和授权提供强大的支持。 标签 "java_security" 暗示了这个项目...
《精通Struts:基于MVC的JavaWeb设计与开发》是由孙卫琴编著的一本专业书籍,专注于讲解如何利用Struts框架进行高效且规范的Java Web应用开发。这本书是针对那些希望深入理解和掌握Struts框架的开发者所写的,旨在...
Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,包括请求映射、视图解析、表单绑定等。本文将详细介绍 ...
Spring MVC 是一个强大的Java web开发框架,用于构建高效、可维护的Web应用程序。在Spring MVC中,表单标签库提供了一种便捷的方式来处理用户输入,它简化了HTML表单与后端控制器之间的交互。本篇文章将深入探讨...
Spring MVC 是一个基于Java的轻量级Web应用框架,它属于Spring框架的一部分,主要用于构建控制器层,实现模型-视图-控制器(Model-View-Controller)架构。在Spring MVC中,开发者可以方便地处理HTTP请求,进行数据...
综上所述,Spring的Web-MVC构架模式以其高度可定制化、解耦和灵活性,为开发者提供了一个强大的Web应用程序开发框架,同时保持了与标准技术和工具的兼容性,使得应用程序能够在不同的环境中高效运行。
Spring Web MVC是Spring框架的核心部分,专门用于构建Web应用程序,特别是那些基于模型-视图-控制器(MVC)设计模式的Web应用。Spring框架提供了一个全面的编程和配置模型,帮助开发者创建灵活、可测试且松散耦合的...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个示例项目包含了Spring MVC工程的所有必要组件和配置,旨在帮助开发者快速理解和实践...