Struts2 入門4 資料校驗_型別轉換_國際化
阿新 • • 發佈:2019-02-12
一.資料校驗
前臺校驗:客戶段校驗
主要通過JavaScript,效率高,但不安全.
後臺校驗:伺服器校驗
這裡是struts2通過xml配置/java程式碼.效率比較低,但安全.
1.Struts2資料校驗
a.java程式碼資料驗證
b.配置檔案資料驗證// 物件,封裝請求的資料 private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } /** * 1.資料驗證的方法(簡單的手動資料驗證) */ //public void validate() { // 驗證所有方法: validate() public void validateRegister() { // 驗證指定的方法: validate要驗證的方法名() // 使用者名稱、密碼驗證 //if (user != null) { // --> 驗證使用者名稱 if (user.getName() == null || "".equals(user.getName())) { // 使用者名稱不合法! 新增錯誤資訊到map super.addFieldError("user.name", "使用者名稱不能為空!"); // 錯誤map不為空! } if (user.getPwd() == null || "".equals(user.getPwd())) { // 密碼不合法! super.addFieldError("user.pwd", "密碼不能為空!"); } //} } //jsp中錯誤資訊的顯示:<s:fielderror fieldName="user.pwd"></s:fielderror>
配置檔案的資料驗證配置檔案的命名方法:ActionClassName-validation.xml 驗證action中的所有方法ActionClassName-actionName-validation.xml 驗證指定action中的方法
<validators> <!-- 驗證“使用者名稱欄位” user.name 對應Action中要驗證的屬性!--> <field name="user.name"> <!-- 指定驗證器型別 --> <field-validator type="requiredstring"> <message>使用者名稱不能為空!</message> </field-validator> </field> </validators> //驗證器檢視:xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml
二.國際化
配置國際化資原始檔:
命名規則:基礎名_語言簡稱_國家簡稱.properties如:msg_zh_CN.properties
1. 通過常量載入資原始檔
<!-- value的值是資原始檔的包名+資原始檔基礎名 --><constant name="struts.custom.i18n.resources" value="cn.itcast.b_i18n.msg"></constant>
2.jsp通過便籤載入資原始檔
<!-- name的值是資原始檔的包名+資原始檔基礎名 --><s:i18n name=" cn.itcast.b_i18n.msg "></s:i18n>
3. struts提供了國際化的標籤
通過text標籤,可以顯示國際化字串name 值資原始檔中配置的key<s:text name="username"></s:text>
三.型別轉換器
|-- interface TypeConverter 型別轉換的介面
|-- class DefaultTypeConverterstruts預設的型別轉換器
|-- abstract class StrutsTypeConverter
自定義型別轉換器可以繼承此類
a.自定義型別轉換器
//繼承StrutsTypeConverter類
public class MyDataConvert extends StrutsTypeConverter{
/**
* 把表單提交的字串,轉換為指定的目標型別! (String--> Date)
*
* 引數1: Action的上下文map(contextMap)
* 引數2: 表單提交的資料!為陣列型別,一般取陣列第一個元素! <input type=texg name=userName /> 值
* 引數3: 要轉換的目標型別
*/
public Object convertFromString(Map context, String[] values, Class toClass) {
// 判斷: 陣列如果為null,直接返回null
if (values == null || values.length == 0){
return null; // 不需要轉換了
}
// 判斷: 提交的屬性型別,如果不是日期型別,不需要轉換
if (Date.class != toClass) {
return null;
}
/*
* 當前屬性是日期型別,需要轉換
*/
try {
// 格式轉換,轉換成功,就直接返回!
Date birth = formats[i].parse(values[0]); // 字串轉換為日期
return birth;
} catch (ParseException e) {
...
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
return null;
}
}
b.配置轉換器資原始檔命名規則:ActionClassName-convertion.properties區域性型別轉換器
檔案放於Action同一個包目錄下
xwork-conversion.properties全域性型別轉換器(專案的所有Action都可以用)
將自定義型別轉換配置到資原始檔中:RegisterAction-conversion.properties
user.birth=cn.itcast.c_convert.MyDataConvert
四.模型驅動
|--interface ModelDriven<T> 模型驅動介面,T為封裝的物件的類模型驅動的實現,用到模型驅動攔截器:作用:<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor" />
把請求表單的元素資料(表單的屬性名與物件屬性相同),自動填充到Action中的物件中.public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); // public void setUser(User user) { // 可以不用寫set方法 // this.user = user; // } public User getUser() { return user; } //使用者名稱: <input type="text" name="name"> /*********重寫***********/ @Override public User getModel() { return user; } }