Spring MVC:Ajax和JQuery

今天,我想演示如何将AJAX集成到Spring MVC应用程序中。 我将在客户端使用JQuery来发送请求和接收响应。 本教程将基于我以前关于Spring MVC和REST服务的教程之一。 在本文中,您将了解如何在异步请求的帮助下使Web应用程序更具交互性。

准备工作

我需要通过删除不再需要的方法来修改SmartphoneController类。 这是AJAX集成的第一步。

//imports are omitted
@Controller
@RequestMapping(value="/smartphones")
public class SmartphoneController {@Autowiredprivate SmartphoneService smartphoneService;@RequestMapping(value="/create", method=RequestMethod.GET)public ModelAndView createSmartphonePage() {ModelAndView mav = new ModelAndView("phones/new-phone");mav.addObject("sPhone", new Smartphone());return mav;}@RequestMapping(value="/create", method=RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone createSmartphone(@RequestBody Smartphone smartphone) {return smartphoneService.create(smartphone);}@RequestMapping(value="/edit/{id}", method=RequestMethod.GET)public ModelAndView editSmartphonePage(@PathVariable int id) {ModelAndView mav = new ModelAndView("phones/edit-phone");Smartphone smartphone = smartphoneService.get(id);mav.addObject("sPhone", smartphone);return mav;}@RequestMapping(value="/edit/{id}", method=RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone editSmartphone(@PathVariable int id, @RequestBody Smartphone smartphone) {smartphone.setId(id);return smartphoneService.update(smartphone);}@RequestMapping(value="/delete/{id}", method=RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone deleteSmartphone(@PathVariable int id) {return smartphoneService.delete(id);}@RequestMapping(value="", method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic List< Smartphone > allPhones() {return smartphoneService.getAll();}@RequestMapping(value="", method=RequestMethod.GET)public ModelAndView allPhonesPage() {ModelAndView mav = new ModelAndView("phones/all-phones");List< Smartphone > smartphones = new ArrayList< Smartphone >();smartphones.addAll(allPhones());mav.addObject("smartphones", smartphones);return mav;}}

您可以将新版本的SmartphoneController与旧版本进行比较。 删除了处理PUT,POST,DELETE请求并返回ModelAndView对象的方法。 由于AJAX调用可以直接寻址到REST方法,因此删除了这些方法。 现在,控制器仅包含两种类型的方法:

  • 第一种将用户定向到可以执行CRUD操作的页面。
  • 第二种类型执行CRUD操作(REST方法)

客户端

使用AJAX意味着在Web应用程序的客户端上有很多代码。 在本节中,我将演示一个基础知识,这些基础知识将帮助您了解实现AJAX调用需要执行的步骤。 让我们检查一下在应用程序中创建新智能手机的情况。

首先,我需要将JQuery库添加到HTML页面:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

HTML的主要部分进行了一次重要的更新-将表单操作属性的扩展名更改为.json

<div id="container">
<h1>Create new Smartphone</h1>
<div>
<p>Here you can create new Smartphone:</p>
<div id="sPhoneFromResponse"></div>
</div>
<form:form id="newSmartphoneForm" action="${pageContext.request.contextPath}/smartphones/create.json" commandname="sPhone">
<table>
<tbody>
<tr>
<td>Producer:</td>
<td>
<form:select path="producer"><form:option value="NOKIA">Nokia</form:option><form:option selected="selected" value="IPHONE">iPhone</form:option><form:option value="HTC">HTC</form:option><form:option value="SAMSUNG">Samsung</form:option>
</form:select>
</td>
</tr>
<tr>
<td>Model:</td>
<td><form:input path="model"></form:input></td>
</tr>
<tr>
<td>Price:</td>
<td><form:input path="price"></form:input></td>
</tr>
<tr>
<td><input value="Create" type="submit"></td>
<td></td>
</tr>
</tbody>
</table>
</form:form>
<a href="${pageContext.request.contextPath}/index.html">Home page</a>
</div>

现在,女士们,先生们,我希望介绍一段用于创建新智能手机的JQuery代码:

$(document).ready(function() {$('#newSmartphoneForm').submit(function(event) {var producer = $('#producer').val();var model = $('#model').val();var price = $('#price').val();var json = { "producer" : producer, "model" : model, "price": price};$.ajax({url: $("#newSmartphoneForm").attr( "action"),data: JSON.stringify(json),type: "POST",beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "application/json");xhr.setRequestHeader("Content-Type", "application/json");},success: function(smartphone) {var respContent = "";respContent += "<span class="success">Smartphone was created: [";respContent += smartphone.producer + " : ";respContent += smartphone.model + " : " ;respContent += smartphone.price + "]</span>";$("#sPhoneFromResponse").html(respContent);   		}});event.preventDefault();});});

我不会停止这段代码并详细解释它,因为您可以在官方网站上阅读有关AJAX和JQuery的信息。

简要说明:当某人想要提交具有指定ID的表单时,所有表单字段都分配给适当的变量。 之后,根据表单字段变量生成一个新的JSON文档。 然后执行AJAX调用。 它指向在表单标签的action属性中指定的URL。 JSON用作需要处理的数据。 请求的类型为POST(它可以根据操作而有所不同,例如,对于更新,它将具有PUT值)。 在beforeSend函数中,我明确指定了JSON格式所需的标头。 最后,我制定一个响应并将其插入DOM。

创造新的智能手机

就是与智能手机的创作有关的东西。 智能手机的更新与此类似,只是请求的类型需要更改。

现在,让我们看看如何处理DELETE类型的请求。 和以前一样,我需要将URL扩展名更改为.json

<a href="${pageContext.request.contextPath}/smartphones/delete/${sPhone.id}.json">Delete</a>

与POST和PUT相比,用于DELETE操作的JQuery代码将有所不同。

$(document).ready(function() {var deleteLink = $("a:contains('Delete')");$(deleteLink).click(function(event) {$.ajax({url: $(event.target).attr("href"),type: "DELETE",beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "application/json");xhr.setRequestHeader("Content-Type", "application/json");},success: function(smartphone) {var respContent = "";var rowToDelete = $(event.target).closest("tr");rowToDelete.remove();respContent += "<span class="success">Smartphone was deleted: [";respContent += smartphone.producer + " : ";respContent += smartphone.model + " : " ;respContent += smartphone.price + "]</span>";$("#sPhoneFromResponse").html(respContent);   		}});event.preventDefault();});});

第一个区别是元素的选择器。 如果使用DELETE,我想使用链接,但不使用表单。 AJAX调用的类型更改为DELETE值。 没有与请求一起发送的任何数据。 最后,我删除了需要删除的智能手机行。

删除智能手机

摘要

我希望这份简短的AJAX概述对您有所帮助。 AJAX可以在任何Web应用程序中实现很多功能,因此请不要忽略这种与服务器通信的便捷方法。 您可以在GitHub上找到此应用程序。

参考: Spring MVC: Fruzenshtein的便笺博客中来自JCG合作伙伴 Alexey Zvolinskiy的Ajax&JQuery 。

翻译自: https://www.javacodegeeks.com/2013/09/spring-mvc-ajax-jquery.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计孙家啸第一版,广东年月自考各专业课程使用教材.doc

广东年月自考各专业课程使用教材附件2&#xff1a;广东2013年4月自考各专业课程使用教材序号课程代码课程名称使用教材作者出版社版次100009政治经济学(财经类)政治经济学(财经类)张雷声外语教学与研究出版社2012年版200012英语(一)大学英语自学教程(上册)高远高等教育出版社19…

手把手带你写一个JavaScript类型判断小工具

业务写了很多&#xff0c;依然不是前端大神&#xff0c;我相信这是很多‘入坑’前端开发同学的迷茫之处&#xff0c;个人觉得前端职业发展是有路径可寻的&#xff0c;前期写业务是一个积累过程&#xff0c;后期提炼总结&#xff0c;比如编程思想&#xff0c;父子类的原型继承&a…

【目录】《剑指Offer》Java实现

如题&#xff1a; 1) 找出数组中重复的数字 2) 不修改数组找出重复的数字 3) 二维数组中的查找 4) 替换空格 5) 从尾到头打印链表 6) 重建二叉树 7) 二叉树的下一个结点 8) 用两个栈实现队列 9) 斐波那契数列及青蛙跳台阶问题 10) 旋转数组的最小数字 11) 矩阵中的路…

yolov3之pytorch源码解析_springmvc源码架构解析之view

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…

Xstream将XML转换为javabean的问题

1.问题&#xff1a;Xstream is not security 解决方法&#xff1a;加上 2.问题&#xff1a;如果没有第二行代码&#xff0c;会出现xstream forbiddenclassexception 解决方法&#xff1a;加上第二行&#xff0c;其中参数是要进行解析的对象&#xff01; 调用该方法&#xff1a;…

蚂蚁属性细微差别

每隔一段时间&#xff0c;我会想起Ant属性的一些细微差别 &#xff0c;一旦忘记它们&#xff0c;在与Ant交互时会引起混乱。 特别是&#xff0c; Ant属性 通常是不可变的 &#xff08;不包括Ant 1.8版本的 局部属性 &#xff09;&#xff0c;并且在其首次设置时“永久”设置&am…

c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

详解约瑟夫环问题及其相关的C语言算法实现约瑟夫环问题N个人围成一圈顺序编号&#xff0c;从1号开始按1、2、3......顺序报数&#xff0c;报p者退出圈外&#xff0c;其余的人再从1、2、3开始报数&#xff0c;报p的人再退出圈外&#xff0c;以此类推。请按退出顺序输出每个退出人…

《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍 技术栈的选择 首先我们构建前端架构需要对前端生态圈有一切了解&#xff0c;并且最好带有一定的技术前瞻性&#xff0c;好的技术架构可能日后会方便的扩展&#xff0c;减少重构的次数&#xff0c;即使重构也不需要大动干戈&#xff0c;我通常选型技术栈…

联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...

前言&#xff1a;笔记本电脑&#xff0c;主要分为三种&#xff1a;轻薄本<全能本<游戏本。轻薄本&#xff0c;又称办公笔记本电脑&#xff0c;因为轻薄方便携带&#xff0c;通常用于移动办公使用。全能本&#xff0c;就是把轻薄本的集显变成了小独显&#xff0c;增加了独…

【BZOJ 1098】办公楼(补图连通块个数,Bfs)

补图连通块个数这大概是一个套路吧&#xff0c;我之前没有见到过&#xff0c;想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法&#xff0c;但进行巧妙的实现&#xff0c;就可以分析出它的上界不会超过 $O(n m)$。 接下来介绍一下这个技巧&#xff1a; 很显然一个…

Spring MVC:资源

我从博客读者那里收到的最常见的问题之一是如何在Spring MVC的应用程序中使用CSS和javascript文件。 因此&#xff0c;这是撰写有关Spring MVC中资源使用情况的文章的好机会。 通常&#xff0c;我将使用基于Java的配置方法。 如今&#xff0c;很难想象没有CSS和JavaScript文件…

map

头文件 首先要引入头文件 #include <map> . 并使用命名空间 using namespace std; 1、插入元素 用pair 或者 make_pair 均可&#xff0c;map键值不能重复。 map1.insert(pair<int,string>(123,"aaaaa")); //pair map1.insert(make_pair<int,string&…

c语言读文件空格间隔,c语言文件流实现按单个词读取(以空格、分号等作间隔)...

c语言文件流实现按词读取(以空格、分号等作间隔)1.基本描述在之前的作业中&#xff0c;认真编写代码&#xff0c;从中发现不少知识积累上的欠缺。编程中使用到的c语言文件读取&#xff0c;要求是按照获取到一个完整的词&#xff0c;并对其进行处理。写有java或c语言源程序的.tx…

山东专升本access知识点_全国各省份每年的专升本考试大纲啥时候公布?考纲公布之前你该做什么?...

?星标/置顶专升本招考下一个上岸的就是你最近小编在专升本招考后台收到很多同学的留言&#xff0c;大多同学都是看到好多省都公布了专升本考试政策和大纲&#xff0c;却迟迟不见自己所在的省份出&#xff0c;于是火急火燎地找到小编来问&#xff1a;XX省的考试大纲到底啥时候出…

2018091-2 博客作业

此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101 1.建博客 在 cnblogs.com (博客园)建账号。博客地址&#xff1a;https://www.cnblogs.com/LY0503/ 2. 博客作业 &#xff08;1&#xff09;回想一下你曾经对计算机专业的畅想 当初你是如何做出选择…

观点|蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

小蚂蚁说&#xff1a;王保平&#xff0c;花名玉伯。熟悉前端和SeaJS的人一定对这个名字不陌生。作为前端领域的一枚大大大牛&#xff0c;他现在担任蚂蚁金服体验技术部负责人。本文&#xff0c;他分享了他从前端一路进阶升级到体验科技的个人思考&#xff0c;并详细介绍了体验科…

excel 电阻并联计算_电路分析基础(5)-关于电阻,有些话我还是要说一说

电阻定义&#xff1a;导体对电流的阻碍作用就叫该导体的电阻。不同的导体&#xff0c;电阻一般不同&#xff0c;电阻是导体本身的一种性质。定义式如下&#xff1a;因此&#xff0c;我们应该清楚了欧姆定律的本质到底是什么&#xff0c;为啥电阻跟电压和电流没有关系&#xff0…

针对新手的Java EE7和Maven项目–第2部分–为我们的应用程序定义一场简单的战争...

从第一部分恢复 第1部分 我们刚刚定义了父 pom。 一种特殊的pom类型&#xff0c;它最终定义了我们的应用程序将要使用的库。 它还配置了所有用于打包我们应用程序每个模块的Maven工具。 您可以在此处 签出 -1部分示例代码。 因此&#xff0c;到目前为止&#xff0c;在将要开发…

postman实现从response headers中获取cookie,并将其设置为环境变量

1.最近在学习postman的使用方法,为了保证后续模块操作&#xff0c;必须在登录时获取的session值&#xff0c;并将其设置为环境变量&#xff0c;session的位置处于response headers里面返回的set-cookie参数&#xff0c;并且将set-cookie中的session通过split方法截取出来. 写法…

c语言如何在文件中间插入数据,急求如何将下列C语言程序数据存储到文件中?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …