作者kiwatami (悠游自在)
看板java
標題Re: [J2EE] Spring MVC Form Validation 問題
時間Sat Feb 15 22:17:21 2014
※ 引述《ek0424 ()》之銘言:
: 各位板上的大大好,最近小弟在學習spring這個framework
: 在開發過程中有遇到一個問題,在網路上尋找許久的資料還是無解
: 目前因為前端部分有大量的表單欄位要做格式驗證處理,所以我參考了
: http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/
: 但是卻發現有個問題如下:
: 1.不用Form表單做的話,可以達到同樣的驗證效果嗎?
我沒用過這個功能
不過這點應該自己試一次就可以知道有沒有用了
如果不行的話
可以自己寫一個Mapping參數值到POJO的功能
再傳入另一個method
效果應該一樣
例如:
// Mapping
Customer customer = ReflectionUtil.mapping(request, Customer.class);
// Do validation and insertion
String view = this.doAddCustomer(customer);
private String doAddCustomer(@Valid Customer customer);
不過我自己在做後端表單驗證都是自己寫
畢竟有些參數驗證還滿麻煩的
你可以試試用Spring的Interceptor
在進入Controller之前就做好驗證
並根據是否為ajax要求做不同的回應內容
如此一來你的驗證程式碼都會在固定的一包package裡面
(如controller.interceptor.validation)
還可以用spring的xml配置隨意更換而不用動到原始碼
: 2.如果我的Form表單想用Ajax處理,然後一樣有驗證效果該怎麼做?
有一個偷吃步的方法
就是將Form表單的target指定給一個隱藏的iframe
這樣就跟平常submit form的流程差不多了
只不過回應內容要另外處理
不然就把表單內容放在DIV裡
在iframe裡用parent.doReplaceForm($("div").html());
應該也可以吧XD?
如果你是想將form表單直接由ajax的方式傳送參數
可以使用
$(document.formName).serialize();
做為ajax的data參數值
即可傳送整張表單的所有欄位
: 3.因為練習接案子,對方要求要有API文件,然後用JSON格式作溝通
: 很多表單的東西,都不是傳JSON作處理,該怎麼改成都用JSON溝通?
: 不知道有沒有大大有經驗,可以指點小弟一下。
後端的json處理我是使用google的gson套件
不知道你有沒有使用Maven
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
之後你只要在你的Data Bean加入以下method
public String toJson(){
return new GsonBuilder().disableHtmlEscaping().create().toJson(this);
}
就可以取得json格式的字串
到前端再使用jQuery parsing
var json = $.parseJSON(jsonMessage);
var status = json.status;
var message = json.message;
當然有更簡單的方式
例如將dataType直接指定為json
其實JSON就是個格式化的字串
這樣想之後會簡單一點
就是字串傳來傳去嘛 哈哈哈
有物件解釋就夠了
以下是題外話
其實我不太推薦在view裡用太多的taglib或是什麼其他一大堆功能
基本上我的view裡面是迴圈居多
if else的判斷式盡量在後端就處理完
拿最簡單select element輸出做範例
大概會長這樣
<loop>
<select>
<option value=${value} ${selected}>$display</option>
</select>
</loop>
除了loop(偷懶一下)之外
其他都是設計師可以看懂的
或是不需要看懂也沒關係的
非必要的東西不寫在view裡
所以我套版完成後跟一開始設計師給的HTML原始碼差異都不大
若要改版面需要重新溝通、重新套版都很方便
用很多程式相關的標籤在view裡 反而失去MVC的本意了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.166.88
→ kiwatami:loop寫錯地方XD 懶得改了 那邊不是重點 02/15 22:19
推 ek0424:感謝大大您的解說!感覺您的程式碼一定很精簡~學習了。 02/16 12:58
推 ek0424:若有程式碼完整範例就更好了!XD 02/16 13:12
→ kiwatami:沒那麼閒啦XD 02/16 23:44