Spring MVC和JQuery用于Ajax表单验证

在本教程中,我们将看到如何使用Ajax和Spring MVC和JQuery在服务器端验证表单。 Spring MVC为通过注释驱动的配置采用Ajax提供了非常方便的过程。 我们将使用此注释驱动的配置以JSON数据的形式发送Ajax响应。 响应将包含表单验证的状态,并且表单数据中存在任何错误的错误消息。

使用的工具:
  • Spring MVC 3.0.3
  • jQuery 1.4.2
  • 杰克逊1.5.3
在示例中,我们将使用Ajax和Spring MVC将具有名称和教育程度的用户添加到列表中。 用户数据将在JQuery的帮助下发送到Spring MVC控制器,并且如果表单数据中没有验证错误,控制器将返回添加的用户的完整列表,直到时间为止;如果表单数据中存在验证错误,则控制器将返回验证错误。 。
因此,我们将在本教程中学习两个重要的知识:
  1. 如何在JQuery的帮助下在Spring MVC中使用Ajax验证表单数据?
  2. 以及如何将对象列表发回给Ajax调用作为响应?
用户的域类
以下是我们的User域类,它将保存表单数据:
package com.raistudies.domain;public class User {private String name = null;private String education = null;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEducation() {return education;}public void setEducation(String education) {this.education = education;}}

我们的用户域对象名称和教育有两个字段。
用于发送JSON响应的Ajax响应域类
以下是我们将用于发送响应的域对象:

package com.raistudies.domain;public class JsonResponse {private String status = null;private Object result = null;public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public Object getResult() {return result;}public void setResult(Object result) {this.result = result;}}

它包含两个属性,“状态”和“结果”。 “状态”字段是字符串类型,将包含“失败”或“成功”。 “结果”将包含其他要发送回浏览器的数据。
UserController.java

package com.raistudies.controllers;import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ValidationUtils;
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.ResponseBody;import com.raistudies.domain.JsonResponse;
import com.raistudies.domain.User;@Controller
public class UserController {private List<User> userList = new ArrayList<User>();@RequestMapping(value="/AddUser.htm",method=RequestMethod.GET)public String showForm(){return "AddUser";}@RequestMapping(value="/AddUser.htm",method=RequestMethod.POST)public @ResponseBody JsonResponse addUser(@ModelAttribute(value="user") User user, BindingResult result ){JsonResponse res = new JsonResponse();ValidationUtils.rejectIfEmpty(result, "name", "Name can not be empty.");ValidationUtils.rejectIfEmpty(result, "education", "Educatioan not be empty");if(!result.hasErrors()){userList.add(user);res.setStatus("SUCCESS");res.setResult(userList);}else{res.setStatus("FAIL");res.setResult(result.getAllErrors());}return res;}}
showForm()用于将“添加”用户表单添加到浏览器。 方法addUser()将处理ajax请求并验证User对象,如果表单数据中没有验证错误,它将把userList对象设置为JsonResponse类的result属性,状态为“ SUCCESS ”。 但是,如果表单数据中存在错误, 它将使用getAllErrors()方法从BindingResult对象中提取错误列表,并将其设置为状态为“ FAIL ”的JsonResponse类的result属性。
AddUser.jsp
以下是在JQuery的帮助下使用Ajax调用UserController的jsp页面:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add Users using ajax</title>
<script src="<%=request.getContextPath() %>/js/jquery.js"></script>
<script type="text/javascript">var contexPath = "<%=request.getContextPath() %>";
</script>
<script src="<%=request.getContextPath() %>/js/user.js"></script>
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/style/app.css">
</head>
<body>
<h1>Add Users using Ajax ........</h1><table><tr><td colspan="2"><div id="error" class="error"></div></td></tr><tr><td>Enter your name : </td><td> <input type="text" id="name"><br/></td></tr><tr><td>Education : </td><td> <input type="text" id="education"><br/></td></tr><tr><td colspan="2"><input type="button" value="Add Users" onclick="doAjaxPost()"><br/></td></tr><tr><td colspan="2"><div id="info" class="success"></div></td></tr></table>
</body>
</html>

该jsp页面包含一个js文件user.js ,该文件已用于保存JavaScript方法doAjaxPost()的定义,该方法生成ajax类,并且还使用Ajax调用的响应来动态更新页面数据。
user.js
以下是ajax类的代码,并解释了从Spring MVC控制器收到的响应:

function doAjaxPost() {// get the form valuesvar name = $('#name').val();var education = $('#education').val();$.ajax({type: "POST",url: contexPath + "/AddUser.htm",data: "name=" + name + "&education=" + education,success: function(response){// we have the responseif(response.status == "SUCCESS"){userInfo = "<ol>";for(i =0 ; i < response.result.length ; i++){userInfo += "<br><li><b>Name</b> : " + response.result[i].name +";<b> Education</b> : " + response.result[i].education;}userInfo += "</ol>";$('#info').html("User has been added to the list successfully. " + userInfo);$('#name').val('');$('#education').val('');$('#error').hide('slow');$('#info').show('slow');}else{errorInfo = "";for(i =0 ; i < response.result.length ; i++){errorInfo += "<br>" + (i + 1) +". " + response.result[i].code;}$('#error').html("Please correct following errors: " + errorInfo);$('#info').hide('slow');$('#error').show('slow');}},error: function(e){alert('Error: ' + e);}});
}

JQuery的$ .ajax()方法已用于在此处进行Ajax调用,该调用将表单数据名称和教育字段值发送给Spring Controller。 在Ajax调用成功后,它首先检查响应的状态字段。 请注意,此处的响应对象是JsonResponse Java对象的JSON表示形式。
如果响应的状态字段为“ SUCCESS”,则使用符号response.result [i]遍历用户列表,请注意,杰克逊库将Java的列表对象转换为json数组。
如果状态为“ FAIL”,则结果对象将包含验证错误,我们可以使用符号response.result [i] .code进行访问 ,此处代码将返回在Spring控制器中添加的错误消息。 在tomcat 6服务器上运行示例时,它将打开以下形式:

Ajax验证表

只需单击“添加用户”按钮而不输入任何值,它将显示该字段的错误,如下图所示:

页面中的Ajax验证显示错误

现在输入任何名称和学历,然后单击“添加用户”按钮。 它将在列表中添加用户详细信息,并在页面上显示整个用户列表的信息:

使用Spring MVC和JQuery成功页面进行Ajax验证

您也可以通过从以下链接下载示例来尝试该示例:

资料来源: 下载
来源+库: 下载

参考:我们的JCG合作伙伴 使用Spring MVC和JQuery进行Ajax表单验证   Rai Studies博客上的Rahul Mondal。


翻译自: https://www.javacodegeeks.com/2012/02/spring-mvc-and-jquery-for-ajax-form.html

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

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

相关文章

Linux学习笔记——gzip命令

这个 gzip 程序被用来压缩一个或多个文件。当执行 gzip 命令时&#xff0c;则原始文件的压缩版会替代原始文件。 相对应的 gunzip 程序被用来把压缩文件复原为没有被压缩的版本。gzip 选项&#xff1a;选项 说明-c把输出写入到标准输出&#xff0c;并且保留原始文件。也有可能用…

java集合类——Stack类

查看java的API文档&#xff0c;Stack继承Vector类。 栈的特点是后进先出。 API中Stack自身的方法不多&#xff0c;基本跟栈的特点有关。 Java代码 import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack&l…

免装版_无缝贴图制作软件 PixPlant2中文免装版

点击上方蓝字关注我们如您喜欢我们的公众号&#xff0c;不妨推荐给身边的朋友资源介绍&#xff1a;资源来源于网络&#xff0c;很多时候我们从网上找的贴图并不是无缝的&#xff0c;而且一般都没有高光/法线贴图这些&#xff0c;在材质的模拟上就要差了很多&#xff0c;在这里小…

Java中使用Map and Fold进行功能性编程

在函数式编程中&#xff0c;Map和Fold是两个非常有用的运算符&#xff0c;它们属于每种函数式语言。 如果Map和Fold运算符是如此强大且必不可少&#xff0c;那么您如何解释说即使Java编程语言缺少这两个运算符&#xff0c;我们也可以使用Java来完成工作&#xff1f; 事实是&…

Mysql 分页语句Limit用法

Mysql 分页语句Limit用法 1、Mysql的limit用法 在我们使用查询语句的时候&#xff0c;经常要返回前几条或者中间某几行数据&#xff0c;这个时候怎么办呢&#xff1f;不用担心&#xff0c;mysql已经为我们提供了这样一个功能。 Sql代码 SELECT * FROM table LIMIT [offset,] r…

波纹扩散_C4D_动画amp;RS波纹扩散效果J_014

C4D-效果扩散效果&#xff0c;Redshift混合冰材质&#xff1b;利用顶点贴图扩散效果制作&#xff0c;RS混合调用顶点贴图。视频教程时长22分钟。对象为可编辑对象才能用顶点贴图。冰结域的扩展是这个动画的重点&#xff0c;在这个模式下&#xff0c;权重会根据半径向外扩展&…

软件测试工程师简历项目经验怎么写?--9999个已成功入职的软件测试工程师真实简历

简历是我们求职的第一步&#xff0c;也是非常重要的一步。 青云叔叔看过太多简历&#xff0c;最快3秒就淘汰一份简历&#xff0c;因为其实我们每天要收到很多简历进行筛选&#xff0c;那么面试官其实也是会很快进行对简历进行判断的&#xff0c;如果你对简历写的一塌糊涂&…

【poj2464】树状数组

这道题。。太特么多细节了。。 题意&#xff1a;在平面直角坐标系中给你N个点&#xff0c;stan和ollie玩一个游戏&#xff0c;首先stan在竖直方向上画一条直线&#xff0c;该直线必须要过其中的某个点&#xff0c;然后ollie在水平方向上画一条直线&#xff0c;该直线的要求是要…

azure git怎么使用_Azure(一)Azure Traffic Manager为我们的Web项目提供负载均衡

一&#xff0c;引言上一篇讲到我们将自己的Net Core Web 项目部署到 Azure 的 Web App 的一项 pass 服务&#xff0c;假如随着项目的日益增长的访问量&#xff0c;之前部署到单节点的应用可能无法保证其稳定性&#xff0c;可能会导致系统宕机等等问题&#xff0c;这个时候&…

文字描边_如何在网页里实现文字描边效果

文字描边想要在网页里实现文本描边效果&#xff0c;在以前只能使用Photoshop等来实现&#xff0c;但现在只需要一个text-stroke属性&#xff0c;即可轻松做到文本描边&#xff0c;渐变文本描边&#xff0c;甚至图片文本描边。01语法text-stroke: text-stroke是一个复合属性&…

javascript数据结构-栈

github博客地址 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。遵循后进先出原则&#xff0c;像垃圾桶似的。功能实现依然按照增删改查来进行&#xff0c;内部数据存储可以借用语言原生支持的数组。 栈类 function Stack(){this.data []; }添…

”二柱子“个人项目

”二柱子“个人项目 关于二柱子的个人项目&#xff0c;据说……是这么发生的…… 二柱子因为懒(,,• ₃ •,,)&#xff0c;要给他上小学的儿子编写个能够出小学四则运算题目的程序。老师上课的时候又添加了条件&#xff1a; 1、打印至少30道题 2、除了整数之外&#xff0c;还要…

Eclipse中的集成Git插件删除线上远程分支

Eclipse 的忠实党,在使用Git 多人协作以分支的形式开发应用时分支合并到主干后往往再没什么用(我的做法是保留一两周再干掉),在此记录使用Eclipse的Git 插件来删除无用的分支。 操作步骤: 项目右键 — Team — Remote — Push — Next — Finesh 1,下拉框选择你要删除的远程分支…

从MongoDB GridFS流式传输文件

不久前&#xff0c;我在Twitter上发布了自己的最新作品&#xff0c;即从MongoDB GridFS传输文件进行下载&#xff08;而不是将整个文件存储到内存中然后提供服务&#xff09;&#xff0c;这是我取得的一个小胜利。 我答应就此事写博客&#xff0c;但不幸的是&#xff0c;我的特…

Css Sprites 多张图片整合在一张图片上

CSS Sprites原理&#xff1a; CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中&#xff0c;再利用CSS的“background-image”&#xff0c;“background- repeat”&#xff0c;“background-position”的组合进行背景定位&#xff0c;background-position可以用数…

无需复杂插件即可从Eclipse启动和调试Tomcat

像Eclipse这样的现代IDE提供了各种插件来简化Web开发。 但是&#xff0c;我相信将Tomcat作为“常规” Java应用程序启动仍然可以提供最佳的调试体验。 大多数情况下&#xff0c;这是因为这些工具将Tomcat或任何其他servlet容器作为外部进程启动&#xff0c;然后在其上附加一个远…

flutter 国际化_Flutter 开发实战资源推荐

开工第一天&#xff0c;来点轻松的资源推荐。这是一篇实战类资源推荐&#xff0c;其实Flutter的入门资料官方已经做得很好了&#xff0c;如果你是零基础&#xff0c;还是建议先啃一遍官方的教程&#xff0c;然后再看以下实战资源&#xff0c;相信在你看官方课程中涉及到的一些疑…

JSF和“立即”属性–命令组件

JSF中的即时属性通常被误解。 如果您不相信我&#xff0c;请查看Stack Overflow 。 造成这种混乱的部分原因可能是输入&#xff08;即<h&#xff1a;inputText />&#xff09;和命令&#xff08;即<h&#xff1a;commandButton />&#xff09;组件都立即可用&#…

通过joystick遥感和按键控制机器人--11

原创博客&#xff1a;转载请表明出处&#xff1a;http://www.cnblogs.com/zxouxuewei/ 1.首先安装joystick遥控器驱动&#xff1a; sudo apt-get install ros-indigo-joystick-drivers ros-indigo-turtlebot-teleop 2.运行tulterbot机器人&#xff1a; roslaunch rbx1_bringup …

Nginx 实现网站 http、https 配置

在 nginx conf 目录下新建 ssl 目录&#xff0c;将申请的 ssl证书文件拷贝到此处&#xff1a; 修改 nginx 配置文件使支持 https&#xff0c;修改如下&#xff1a; server {listen 80;listen 443 ssl;ssl_certificate ssl/cert-xuexiyuan.cn.crt;ssl_certificat…