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.pswp.cn/news/373577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373577.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

myeclipse10.7破解成功 但 無法打war包 提示:securecrt alert:integrity ch

myeclipse10.7破解成功 但 無法打war包 提示&#xff1a;securecrt alert:integritycheck error找了好久才找到解決辦法http://download.csdn.net/detail/yi303526230/6889101#comment本次對于myeclipse10破解后&#xff0c;導出war包時報“SECURITY ALERT: INTEGERITY CHECK E…

Mongodb的update操作

在前面的文章“mongodb 查詢的語法”里&#xff0c;我介紹了Mongodb的常用查詢語法&#xff0c;Mongodb的update操作也有點復雜&#xff0c;我結合自己的使用經驗&#xff0c;在這里介紹一下&#xff0c;給用mongodb的朋友看看&#xff0c;也方便以后自己用到的時候查閱&#x…

封裝方法

<?php class DBDA {public $host"localhost";public $uid"root";public $pwd"123";public $dbname"mydb";/***給一個sql語句&#xff0c;返回執行的結果*param string $sql 用戶指定的sql語句*param int $type 用戶給的語句類型&a…

AFNetwork 作用和使用方法具體解釋

轉自&#xff1a;http://www.maxiaoguo.com/clothes/269.html AFNetworking是一個輕量級的iOS網絡通信類庫。它建立在NSURLConnection和NSOperation等類庫的基礎上&#xff0c;讓非常多網絡通信功能的實現變得十分簡單。它支持HTTP請求和基于REST的網絡服務&#xff08;包含GET…

在MongoDB中存儲分層數據

繼續使用MongoDB進行 NoSQL之旅&#xff0c;我想觸摸一個經常出現的特定用例&#xff1a;存儲分層文檔關系。 MongoDB是很棒的文檔數據存儲&#xff0c;但是如果文檔具有父子關系怎么辦&#xff1f; 我們可以有效地存儲和查詢此類文檔層次結構嗎&#xff1f; 答案是肯定的&…

圖的深度遍歷

圖的深度遍歷 Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description 請定一個無向圖&#xff0c;頂點編號從0到n-1&#xff0c;用深度優先搜索(DFS)&#xff0c;遍歷并輸出。遍歷時&#xff0c;先遍歷節點編號小的。Input 輸入第一行為整數n&#xff…

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;在這里小…

網頁特效:用CSS3制作3D圖片立方體旋轉特效

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>CSS3制作3D圖片立方體旋轉特效 - 站長素材</title><style type"text/css">html{background:linear-gradient(#ff0 0%,#F00 80%);height: 100%; …

Java中使用Map and Fold進行功能性編程

在函數式編程中&#xff0c;Map和Fold是兩個非常有用的運算符&#xff0c;它們屬于每種函數式語言。 如果Map和Fold運算符是如此強大且必不可少&#xff0c;那么您如何解釋說即使Java編程語言缺少這兩個運算符&#xff0c;我們也可以使用Java來完成工作&#xff1f; 事實是&…

Linux 文件壓縮解壓縮

文章來自&#xff1a;http://www.xuexiyuan.cn/article/detail/53.html *.tar格式 解包1&#xff1a;$ tar -xvf FileName.tar解包2&#xff1a;$ tar -xvf FileName.tar -C DirName# tar解壓縮到指定目錄打包&#xff1a;$ tar -cvf FileName.tar DirName# tar是打包&#x…

Mysql 分頁語句Limit用法

Mysql 分頁語句Limit用法 1、Mysql的limit用法 在我們使用查詢語句的時候&#xff0c;經常要返回前幾條或者中間某幾行數據&#xff0c;這個時候怎么辦呢&#xff1f;不用擔心&#xff0c;mysql已經為我們提供了這樣一個功能。 Sql代碼 SELECT * FROM table LIMIT [offset,] r…

sqlmap指定cookie_利用SQLMap進行cookie注入

SQLMap被稱為注入神器&#xff0c;N多大神都使用SQLmap來進行注入測試&#xff0c;我等小菜當然也會用來裝一下A*C&#xff0c;用了N久SQLMAP了&#xff0c;但是極少用 到cookie注入&#xff0c;一遇到cookie注入就去使用注入中轉工具&#xff0c;比較麻煩。剛好今天群里的USB問…

c語言else匹配問題

1 #include <stdio.h>2 #include <stdlib.h>3 4 //實現 依次輸入三個遞增的數 然后正確輸出5 6 //為什么得不到我們想要的結果呢 這就是else匹配的問題 當然了 在編譯器里面他會自動給你匹配7 //但是如果沒有了編譯器 筆試的時候呢。。。。8 //原因為&#xff1a;e…

Java:偽造工廠的閉包以創建域對象

最近&#xff0c;我們想要創建一個域對象&#xff0c;該對象需要具有外部依賴關系才能進行計算&#xff0c;并且希望能夠在測試中解決該依賴關系。 最初&#xff0c;我們只是在領域類中新建依賴項&#xff0c;但這使得無法在測試中控制其值。 同樣&#xff0c;我們似乎不應該將…

利用scp 遠程上傳下載文件/文件夾

利用scp傳輸文件 1、從服務器下載文件 scp usernameservername:/path/filename /tmp/local_destination 例如scp codinglog192.168.0.101:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下載到 /tmp/local_destination 2、上傳本地文件到服務器 scp /…

KEIL編譯錯誤總結:

1 expected an identifier&#xff1a;#define宏定義常量后&#xff0c;如果再用前面定義的常量作為枚舉常量就會報錯&#xff0c;方法&#xff0c;去掉#define宏定義 2 ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL 定義的變量和外部聲明調用的變量存儲類型不一致&#…

視覺平衡與物理平衡_設計中的平衡理論為什么這么重要?

原標題&#xff1a;設計中的平衡理論為什么這么重要&#xff1f;在平面設計中很重要的理論就是關于平衡的應用。無論在logo設計還是網頁設計還是海報設計中&#xff0c;一個好的設計一定會兼顧視覺的平衡。今天123標志網就跟大家一起看看平衡的力量。構圖平衡主要意味著調整設計…

Tomcat、JDK 歷史版本下載地址

Tomcat 歷史版本下載地址http://archive.apache.org/dist/tomcat/ JDK 歷史版本下載地址 https://www.oracle.com/technetwork/java/javase/archive-139210.html 個人博客&#xff1a;學習園 原文地址&#xff1a;http://www.xuexiyuan.cn/article/detail/190.html