我一直在考虑在Spring,Ajax和JSON上写博客,但是我从来没有做过。 这主要是因为它非常复杂,并且所需的技术一直处于变化状态。 当我决定撰写此博客时,我在Internet上有一个侦察员,如果您查看诸如Stack Overflow之类的地方,您会看到许多不同且通常相互矛盾的答案,这些问题是“我如何编写Spring Ajax / JSON应用程序? ” 我认为这是Spring专家的错,因为他们一直在忙于改善Spring对JSon的支持。 不仅是JQuery的专家们也很忙,这意味着在过去的几年中,总体情况发生了巨大变化,并且给出了“如何编写Spring Ajax / JSON应用程序”的答案。 已经过时了。

如果查看Keith Donald的原始Spring 3 MVC Ajax应用程序,您会发现它非常复杂。 支持JSON集成需要大量的样板代码和一些怪异JavaScript。 在最新版的Spring中,所有更改都已完成。 正如我所说的,Spring和JQuery的Guy一直很忙,现在事情变得简单得多。 编写此类应用程序时,需要考虑一些步骤。 首先,您需要将能够发出Ajax请求的页面加载到浏览器中。 其次,您必须编写一些代码来服务Ajax请求,最后,页面必须显示其结果。 为了演示Spring MVC,Ajax和JSON,我将使用购物网站场景。 在这种情况下,当用户单击“电子商务页面”链接时,该应用程序将从目录中加载一些项目并将其显示在页面上。 然后,用户检查多个项目并按“确认购买”。 现在,这就是Ajax和JSON的来源,在按“确认购买”时,浏览器向向其发送项目ID的服务器发出Ajax请求。 然后,服务器从数据库中检索项目,并将它们作为JSON返回到浏览器。 然后,浏览器处理JSON,并在屏幕上显示项目。 在编写代码时,第一步是使用Spring仪表板上可用的项目模板来创建Spring MVC项目。

拥有空白项目后,需要对项目的POM文件进行一些更改。 首先,您需要添加Jackson JSON Processor依赖项。 接下来,您需要将Spring的版本更新为3.2.2。 这是因为模板项目生成器仍会生成3.1.1版本的项目。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.0.4</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.0.4</version></dependency>
<org.springframework-version>3.2.2.RELEASE</org.springframework-version>

如果查看我在Github上可用的代码,您会发现我还添加了Tomcat Maven插件并将Java编译器源/目标版本设置为1.7。 这些都是可选步骤。

接下来要做的是创建一个Item类来定义用户将从我们虚构的目录中购买的项目。

public class Item { private final int id; private final String description; private final String name; private final BigDecimal price; private Item(int id, String name, String description, BigDecimal price) { this.id = id; this.name = name; this.description = description; this.price = price; } public final BigDecimal getPrice() { return price; } public final int getId() { return id; } public final String getDescription() { return description; } public final String getName() { return name; } public static Item getInstance(int id, String name, String description, BigDecimal price) { Item item = new Item(id, name, description, price); return item; } }

上面的代码定义了我们简单的Item 。 它的属性包括idnamedescriptionprice

此购物场景的下一步是编写在屏幕上显示商品的代码,以便用户可以进行选择并将其提交给服务器。 如您所料,这涉及编写包含表单的JSP并使用Spring MVC控制器处理来自表单的请求。 我将首先讨论控制器代码,因为它决定了JSP的编写方式。

/** * Create the form */ @RequestMapping(value = "/shopping", method = RequestMethod.GET) public String createForm(Model model) { logger.debug("Displaying items available in the store..."); addDisplayItemsToModel(model); addFormObjectToModel(model); return FORM_VIEW; } private void addDisplayItemsToModel(Model model) { List<Item> items = catalogue.read(); model.addAttribute("items", items); } private void addFormObjectToModel(Model model) { UserSelections userSelections = new UserSelections(); model.addAttribute(userSelections); }

使我们的表单显示在屏幕上的控制器方法是createForm(…) 。 该方法由通常的RequestMapping注释进行注释,该注释告诉Spring将所有具有“ shopping ” URL的GET请求映射到该位置。 该方法包括三个步骤:首先读取目录,以获得要显示的项目列表;然后,执行以下步骤: 然后,它创建一个UserSelections对象,该表单在提交用户购买的商品时由表单使用。 最后,它将我们定向到shopping.jsp

对于这种形式的创建方法,这些设置步骤是很正常的:首先将显示数据添加到模型中,然后将表单提交方式添加到模型中; 但是,这两个步骤经常结合在一起。

在控制器代码中,您还将看到用于获取项目的catalogue对象。 在实际的应用程序中,这等效于创建一个服务层组件,该组件使用DAO和通常与此类应用程序关联的所有用具来读取数据。 在这种情况下,它只是从硬编码数组创建项目列表,并不重要。

该控制器代码与下面的JSP代码片段非常紧密地联系在一起:

<form:form modelAttribute="userSelections" action="confirm" method="post"><c:forEach items="${items}" var="item"><div class="span-4 border"><p><c:out value="${item.name}" /></p></div><div class="span-8 border"><p><c:out value="${item.description}" /></p></div><div class="span-4 border"><p>£<c:out value="${item.price}" /></p></div><div class="span-4 append-4 last"><p><form:checkbox value="${item.id}" path="selection"/></p></div></c:forEach><div class="prepend-12 span-4 append-12"><p><input class="command"type="submit" name="action"value="Confirm Purchase"accesskey="A" /></p></div></form:form>

这里有几点要注意。 首先,我通过使用Spring表单标签(<form:form…>)使自己的生活变得轻松,其次,我正在使用Blueprint格式化页面。 在设置表单标签时,首先要考虑的是表单标签的属性: modelAttributecommandmethodmodelAttribute用于绑定的UserSelections由控制器到HTML表格提供的类。 command属性是一个URL,它告诉浏览器在何处提交其数据,而method属性则告诉浏览器将提交的内容POST到服务器。

在JSP的下一部分中,我使用了forEach循环来显示先前从目录中检索到的项目。 重要的一行是form:checkbox标记。 您可能会怀疑,这会使用项目的ID和selection “路径”创建一个HTML复选框。 对我而言,“路径”一词听起来令人困惑。 Spring的员工实际上的意思是“提交时,取走存储在复选框的value属性(item.id)中的值,如果选中,则将其存储在
使用setSelection(…)方法的UserSelections对象”。 这可能是在后台完成的,方法是解析HttpServletRequest对象,然后使用Java反射进行一些挑剔的扑克操作。 需要注意的是,JSP中的名称如何与UserSelection类的属性名称联系UserSelection

我发现Spring表单标签在大多数情况下非常有用; 但是,为了使事情简单,它在绑定到哪个HTML对象的数据上确实有一些限制。 当您遇到这些限制之一时,请结合使用更多详细的Spring Bind标签和form标签。

好的,因此,当您运行此代码时,将显示一个类似于以下内容的屏幕:

问题是,我知道我在此博客中没有谈论过AKAX和JSON,但我需要设置场景。 在该博客的第二部分中,我一定会介绍该场景的实质部分:通过Ajax调用获取和显示JSON数据。 有关此博客的完整源代码,请参见GitHub – https://github.com/roghughe/captaindebug/tree/master/ajax-json

参考: Spring MVC,Ajax和JSON第1部分–在Captain Debug的Blog博客上由JCG合作伙伴 Roger Hughes进行设置。

翻译自: https://www.javacodegeeks.com/2013/05/spring-mvc-ajax-and-json-part-1-setting-the-scene.html

Spring MVC,Ajax和JSON第1部分–设置场景相关推荐

  1. ajax modelmap,spring mvc+ajax处理JSON返回前台的方法

    在 Spring mvc3中,响应.接受 JSON都十分方便. 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON. 使用 @RequestBod ...

  2. java去除json 转移,Spring MVC返回的json去除根节点名称的方法

    这篇文章主要介绍了Spring MVC返回的json去除根节点名称的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 spring xml中配置视图如果是如下 那么返回结果会是: {" ...

  3. Spring MVC Ajax返回中文乱码

    因为Spring MVC中返回json要使用@ResponseBody注解,而在Spring源码中这个注解的默认编码是"iso-8859-1",所以传中文的话会乱码.解决办法是,直 ...

  4. Spring MVC 学习笔记 json格式的输入和输出

    Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用 <!-- json --><depe ...

  5. mvc ajax post json数据,springmvc解决ajax post json格式数据的跨域问题

    前言:今天解决js跨域,搞了一下午,呜呜,以下是我整理的一些解决方法. Paste_Image.png JsonTest click me var jsonData = JSON.stringify( ...

  6. Spring MVC中返回JSON数据的几种方式

    我们都知道Spring MVC 的Controller方法中默认可以返回ModeAndView 和String 类型,返回的这两种类型数据是被DispatcherServlet拿来给到视图解析器进行继 ...

  7. spring MVC之返回JSON数据(Spring3.0 MVC+Jackson+AJAX)

    参考: http://angelbill3.iteye.com/blog/1985075 问题:在进行springmvc返回json数据的时候报如下错误:用上面的controller,访问:http: ...

  8. Spring MVC ajax:post/get 的具体实现

    Post 方式 1.自动注入 a. pom.xml ---- 配置Maven,添加必要的jar包 1 <!--用于 String-JSONObject 转换 --> 2 <depen ...

  9. Spring MVC —— 前后台传递JSON

    1. 传递JSON参数 vardata = {'id':1,'name':'abc'}; $.ajax({type:'post',url:'homePageAction.do?testAJax',co ...

最新文章

  1. pkg mysql 在macOS 上的管理
  2. 常用实验资源共享整理 20111026
  3. 2021年春季学期-信号与系统-第五次作业参考答案-第三小题
  4. .NET Core 3.0 使用Nswag生成Api文档和客户端代码
  5. java生成大素数_用BigInteger实现大素数生成算法
  6. 谈谈我的session跨域处理方法
  7. 各种小巧的Hello World
  8. ajax 导致 css 延迟_在H5,小程序,uni-app中使用animate.css
  9. SEOBOOK中文电子书-SEO基础教程
  10. 最好的免费在线UML图表工具
  11. 安装hdfview 和 hdf5 环境
  12. 拼音工具类(多音字处理)
  13. 服务器性能测试 iometer 测试io
  14. 大学学习历程简单总结
  15. 苹果计算机cpu 型号怎么看,苹果电脑型号怎么看_mac电脑怎么看型号-win7之家
  16. 成长路上破局思维:工具化时间管理
  17. centos 架设虚拟服务器,centos虚拟主机搭建(centos搭建网站)
  18. 初学DSP(2)-TMS320F280049C代码探究
  19. RISCV--汇编指令
  20. 学业水平考试b能上985吗_哪些大学对会考等级有要求

热门文章

  1. php 去掉url中的index.php,php 去掉url中的index.php
  2. 8.4-中断系统小结(cpu中断七个问题)
  3. 控制语句(if-else+循环+switch)汇编规则
  4. 文本替换sed+字段处理cut,join+awk重新编排字段
  5. 动态调整canvas时的问题
  6. jdk8读取文件_用于从文件读取/写入文件的新JDK 11文件方法
  7. junit 5测试异常处理_使用JUnit 5测试异常
  8. Gradle技巧–显示buildscript依赖性
  9. 将Quarkus应用程序部署到AWS Elastic Beanstalk
  10. EA问题的JDK14实例