WebWork中可以使用兩種方式實現數據保存之前的校驗一種方式是針對每個action寫一個校驗的xml配置文件例如對於BaseActionjava就要在同目錄下建立一個BaseActionvalidationxml另外一種方式就是BaseAction實現Validateable接口在validate方法中使用addFieldError(fieldNamemessage);構造字段錯誤信息對照
使用xml的方式有個問題就是:如果更改或添加校驗規則需要重新裝載部署xml文件另外還有一個問題OpenJWeb的BaseAction是一個處理所有實體類的action換句話說BaseAction是一個通用的不是針對具體實體類的action(BaseAction中的增刪改查相關方法的參數都是抽象實體類)所以不適合將不同表字段的校驗配置寫到同一個BaseActionvalidationxml中第二種方案是更好的選擇下面介紹實現方式:
BaseAction中的validate的方法中的代碼片段:
list = CommonValidatevalidate(ntainergetEntity(thisentityClassName)thisoperate);
if(list!=null&& listsize()>)
{
String fieldName = ((LabelValueBean)listget())getValue();
String message = ((LabelValueBean)listget())getLabel();
addFieldError(fieldNamemessage);
//返回輸入頁面的時候填充下拉列表字段
map = JspBuffergetListMaps(thisentityClassName true request);
requestsetAttribute(mapmap);
}
CommonValidate類是讀取當前實體類的字段配置信息也就是從字段基本信息表eas_meta_column中遍歷字段
因為這個表中有是否可空是否唯一的配置所以當比較當前實體類當前字段如果不符合eas_meta_column中定義的
約束比如非空約束或唯一值約束則CommonValidate增加一個LabelValueBean對象到list中此LabelValueBean包含了錯誤信息和對應的字段變量名(這個變量名與JSP頁面中的html元素是對應的)CommonValidate從eas_meta_column表中遍歷當前實體類對應數據庫表的信息後將list返回由BaseActionvalidate方法取出list中的內容調用 addFieldError(fieldNamemessage);這樣就完成了校驗在CommonValidate可以擴展更多的校驗邏輯比如字段的數據格式的有效性校驗取值范圍的校驗等
在前端的JSP頁面中不需要增加任何對錯誤信息的輸出的處理如果你希望錯誤提示信息是紅色的而不是默認的黑色可以在<head></head>之間增加:
<style type=text/css> errorMessage { color: red; }
webwork給出了這樣一個靈活方便的校驗框架為我們自己的平台設計校驗框架提供了非常好的基礎下圖是當非空字段沒填數據就保存的時候頁面輸出紅色的錯誤提示信息這個可比拋出異常頁面友好多了而且頁面也不用任何校驗代碼和錯誤信息輸出代碼全部在控制層實現多方便!
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27087.html