11月30在spring mvc中使用Validator框架和文件上傳

首先回顧了spring mvc中的表單驗證和業務邏輯校驗失敗后,回到表單頁面中顯示錯誤信息的整個內部運行流程。
表單校驗出錯后回到表單注冊頁面是由默認的SimpleFormController的processFormSubmission方法自動完成的,王濤忘記這一點,他們覆蓋了processFormSubmission方法,直接在processFormSubmission方法中執行業務邏輯校驗,結果導致表單校驗失敗后不能回到表單注冊頁面。
查看幫助文檔,可以了解到SimpleFormController的詳細工作流程,特別是看onSubmit(Object command,BindException errors)這個方法的幫助,就知道怎樣寫業務邏輯校驗失敗的代碼了。
protected ModelAndView onSubmit(Object command,
??????????????????????????????? BindException errors)
{
??errors.addError(new FieldError("name","用戶名重復"));
??return new ModelAndView(this.getFormView(),errors.getModel());
}
接著分析了onSubmit方法與doSubmitAction方法的應用區別。

講解了如何將Validator框架集成到spring中的設計思想:
class MyValidator implements Validator
{
?boolean supports(Class clazz)
?{
??為什么不能使用:UserCommand.class.equals(clazz);?
??這主要是因為Class沒有覆蓋equals方法。
?}

?void validate(Object obj,Errors errors)
?{
?}
}
編寫的校驗方法的定義應該如下:
public static boolean validateFloatRange(java.lang.Object bean,
???????????????????????????????????????? ValidatorAction va,
???????????????????????????????????????? Field field,
???????????????????????????????????????? Errors errors)
{
????????? ......
}
所以,MyValidator類的validate(Object obj,Errors errors)方法應編寫成如下形式“
?void validate(Object obj,Errors errors)
?{
??ValidateResources resources = new ValidateResources(Inputstream []);
??Validator validator = new Validator(resources,"/logon");
??valdiator.setParameter(Validator.PARAM_BEAN,obj);
??validator.setParameter("org.springframework.validation.Errors",errors);
??validator.validate();
??????? }
我問魏奕東,相比他以前不用validator框架而編寫的對表單信息進行校驗的代碼和這次使用validator框架編寫的代碼,哪個更復雜,他愿意采用哪個?顯然,使用validator框架編寫的代碼更復雜、他更愿意用以前的方式進行表單校驗,那我們為什么要使用validator框架呢?這是為了實現代碼重用和校驗邏輯的封裝和配置使用。如果他想在公司做到更高的開發職位,他想拿到更多的工資,他就應該使用validator框架,這樣,其他級別低的程序員可以不寫校驗代碼了,而直接在validator框架中插入魏奕東寫的校驗方法,老板就會將從其他人身上省下的一部分工錢裝入到魏奕東的口袋,呵呵!

魏奕東,別高興得太早!你想干的這份工作,早就有人干了,這就是spring module,它模仿struts實現的validator框架,實現了調用validator框架的sring mvc的Validator,現在,我們就來看看如何使用spring module提供的validtor吧!

接著我為大家講解了如何使用spring module提供的validtor來執行表單校驗,不過,由于spring不支持動態command對象,所以,我們還無法象struts那樣不寫一行代碼也玩個完整的view層。

楊松發現appfuse中帶的spring module 1.0沒有validateWhen這個校驗規則,不過,我們現在用的是spring module 6.0,不用擔心這個問題。

接著為大家講了struts中的文件上傳和spring mvc中的文件上傳,strtus的文件上傳很簡單,而spring mvc中的文件上傳稍微復雜一些,首先要在配置文件中配置CommonsMultipartResolver,spring mvc才會處理multipart的數據請求,接著就可以使用CommonsMultipartFile處理很大的上傳文件了,不用擔心數組越界的問題。王濤能夠接著我講解的思路說出ByteArrayMultipartFileEditor內部其實就是調用了CommonsMultipartFile的getByte方法來實現將上傳的文件轉換成字節數組的,真是不錯,看來他已經有了自己的編程感覺了,呵呵。


?

轉載于:https://www.cnblogs.com/dairongle97/archive/2006/12/07/2402151.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277129.shtml

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

相關文章

MapReduce其他功能

1. 計數器應用計數器是用來記錄job的執行進度和狀態的。MapReduce 計數器(Counter)為我們提供一個窗口,用于觀察 MapReduce Job 運行期的各種細節數據。對MapReduce性能調優很有幫助,MapReduce性能優化的評估大部分都是…

用樹莓派和PC機搭建多節點私人以太坊網絡

發現國內很少有樹莓派和電腦組建的私人區塊鏈,所以在自己做實驗的過程中記錄下來分享給大家,第一次寫博客,哈哈 以太坊私有鏈搭建(電腦,樹莓派端都適用) (1)新建一個文件夾,例如myc…

CentOS6 YUM安裝MariaDB10.3.10

1、先新增加一個MariaDB.repo vi /etc/yum.repos.d/MariaDB.repo[mariadb] name MariaDB baseurl http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos6-amd64/ gpgkey http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck1 官網地址特別慢,所…

統一配置數據庫連接符的方法

統一配置數據庫連接符的方法 統一配置數據庫的方法一.Web.config(應用方便,安全性差)1.Web.config文件<appSettings><add key"strconn" value"serverlocalhost;databasedlcusmgt;uidsa;pwd"/></appSettings>2.調用文件dim strconn as st…

JIRA的text編輯模式

無意中看到了開發經理描述的一個缺陷&#xff0c;descrption里添加了圖片&#xff0c;添加了代碼&#xff0c;格式非常規整 嘗試了圖片是可以插入的&#xff0c;但是代碼不知道怎么插入的&#xff0c;于是問了下他&#xff0c;當然非常詳細的截圖拋過來了&#xff0c;告訴我詳細…

FusionInsight LibrA V100R002C80SPC300安裝指南

FusionInsight LibrA是企業級的大規模并行處理關系型數據庫。FusionInsight LibrA采用MPP(Massive Parallel Processing)架構&#xff0c;支持行存儲與列存儲&#xff0c;提供PB(Petabyte&#xff0c;2的50次方字節)級別數據量的處理能力。FusionInsight LibrA在核心技術上跟傳…

女人跳槽:最重要的是你的獨立,你的快樂

工作并非證明女人活著的唯一證據。尤其是眼下這一個工作。或者是因為追求更好&#xff0c;或者是因為放棄更壞。一份工作如同一段感情&#xff0c;你不要它&#xff0c;說明它不夠好到留住你。沒有婚姻好過壞的婚姻&#xff0c;沒有工作好過讓你天天流淚的工作。如果實在不滿意…

云托管,邊緣物理計算托管物理計算,你所需要了解的……

隨著業務發展&#xff0c;傳統數據中心建設復雜性越來越高&#xff0c;基建的管理、設備的繁雜、人力成本的提升&#xff0c;是否讓你的運維成本越來越高&#xff1f;企業生產效率卻越來越低&#xff1f; 業務快速發展&#xff0c;設備采購周期冗長&#xff0c;大量采購造成CAP…

閑話WPF之十(Dependency屬性 [2] )

在前一個Post中&#xff0c;曾提到將要重點研究Dependency屬性的三個方面&#xff1a;變化通知&#xff1b;屬性值的繼承&#xff1b;支持多個提供對象。下面&#xff0c;我將分別就這三個內容進行簡單地說明。【變化通知】 在任何時候&#xff0c;只要Dependency屬性的值發生了…

1037 Magic Coupon

題目鏈接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472 這個題目有毒&#xff0c;開始我的while判斷是使用的相乘大于0這種判斷方式&#xff0c;但是最后一個案例始終過不了&#xff0c;可能是因為越界了&#xff0c;但是越界的…

利用解構賦值獲取后端特定字段數據

很多時候&#xff0c;后端接口傳過來的數據并不正好是我們需要的。有些場景下會有很多不需要的字段。 這時如果采用單個賦值的方法賦值數據無疑會比較麻煩。解決的辦法就是利用解構賦值。 mounted(){let objs {name:test,sex:nan,caree:kaifa,height:180,country:country};({na…

理解ORACLE數據庫字符集

一&#xff0e;引言 ORACLE數據庫字符集&#xff0c;即Oracle全球化支持(Globalization Support)&#xff0c;或即國家語言支持&#xff08;NLS&#xff09;其作用是用本國語言和格式來存儲、處理和檢索數據。利用全球化支持&#xff0c;ORACLE為用戶提供自己熟悉的數據庫母語環…

軟件設計師09-面向對象-用例圖

感謝任鑠老師滴視頻 用例圖 1&#xff09;描述一組用例、參與者及它們之間的關系 2&#xff09;用例模型用于需求分析階段 3&#xff09;關系&#xff08;依賴關系&#xff09;&#xff1a;1&#xff09;包含&#xff08;include&#xff09; 1&#xff09;兩個以上用例具有共同…

利用正則表達式截取特定字符中間字符

有如下場景&#xff0c;已知一個長字符串&#xff0c;需要獲取指定字符串之間的字符。 // 已知字符串 var str body908888huhuc實測實《hu需要body和《hu之間的字符串。定義正則表達式。 var reg /(?<body).(?《hu)/;上述正則表達式利用了&#xff1a;獲取指定字符串之后…

資源的積累

最近整理機器里邊的各種文檔&#xff0c;進行異地備份&#xff0c;整理后&#xff0c;看了看尺寸&#xff0c;天呀&#xff0c;竟然有855M&#xff0c;主要是各種文檔、圖片和代碼等非2進制的東東。我按照日期整理了一下&#xff0c;最久的大概是在2003年&#xff0c;公司是在2…

【MySQL】4、Select查詢語句

4.Select查詢語句 4.1、select語句 <?php $servername "localhost"; $username "username"; $password "password"; $dbname "myDB";// 創建連接 $conn mysqli_connect($servername, $username, $password, $dbname); // Che…

一、環境調試確認

1、確認系統網絡 2、確認yum可用 3、確認關閉iptables規則 4、確認停用selinux 兩項安裝 yum -y install gcc gcc-c autoconf pcre pcre-devel make automake yum -y install wget httpd-tools vim 一次初始化 cd /opt/ mkdir app backup download logs work轉載于:https…

JavaScript方法

1、hasOwnProperty&#xff1a;是用來判斷一個對象是否有你給出名稱的屬性或對象。不過需要注意的是&#xff0c;此方法無法檢查該對象的原型鏈中是否具有該屬性&#xff0c;該屬性必須是對象本身的一個成員。isPrototypeOf是用來判斷要檢查其原型鏈的對象是否存在于指定對象實…

Ajax:如何運用updatepanle進行局部刷新

1.設定ScriptManager的EnablePartialRendering"true"(一般默認為true)2.設定要進行局部刷新panel的UpdateMode"Conditional"(本panel 的id為zz) 這樣就可以保在本panle內的控件操作refresh頁面時&#xff0c; 不會將整個page刷新&#xff0c;而刷新本pan…

Shell語法—— while 條件語句

while 循環語句 while 循環語句語法格式為&#xff1a; while < 條件表達式 > do指令 done 有關腳本運行的相關用法 命令說明sh file.sh &把 file.sh 腳本放到后臺運行&#xff08;后臺運行腳本的常用方法&#xff09;ctlc停止執行當前腳本或任務ctlz暫停執行當前腳本…