Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证
生活随笔
收集整理的這篇文章主要介紹了
Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、自定義類型轉換器1、編寫一個類,繼承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter2、覆蓋掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType)context:OGNL表達式的上下文value:實際的值。用戶輸入的都是字符串,但他是一個String數組。toType:目標類型public class DateConvertor extends DefaultTypeConverter {/*context:ognl表達式的上下文value:用戶輸入的值( 保存數據時)或者模型中的屬性。用戶輸入的值是String數組toType:目標類型*/@Overridepublic Object convertValue(Map<String, Object> context, Object value,Class toType) {DateFormat df = new SimpleDateFormat("yyyy/MM/dd");if(toType==Date.class){//2013/05/31----->java.util.Date 保存數據時String strValue = ((String[])value)[0];try {return df.parse(strValue);} catch (ParseException e) {throw new RuntimeException(e);}}else{//java.util.Date----->2013/05/31 獲取數據時Date dValue = (Date)value;return df.format(dValue);}}}3、注冊類型轉換器3.1局部類型轉換器:只對當前的Action有效具體做法:在動作類相同的包中,建立一個名稱是“動作類名-conversion.properties”的配置文件,文件中增加以下內容:要驗證的字段=驗證器的類全名birthday=cn.itcast.convertor.DateConvertor3.2全局類型轉換器:對所有的Action都有效具體做法:在WEB-INF/classes目錄下,建立一個名稱為"xwork-conversion.properties"的配置文件,文件中增加以下內容:目標類型全名=驗證器的類全名java.util.Date=cn.itcast.convertor.DateConvertor注意:如果轉換失敗,Struts2框架會尋找name=input的結果頁面二、自定義攔截器1、編寫一個類,實現com.opensymphony.xwork2.interceptor.Interceptor2、主要實現public String intercept(ActionInvocation invocation) throws Exception{}方法該方法的返回值就相當于動作的返回值如果調用了String result = invocation.invoke();得到了動作類的返回的值。public String intercept(ActionInvocation invocation) throws Exception {//判斷用戶是否登錄HttpSession session = ServletActionContext.getRequest().getSession();Object obj = session.getAttribute("user");if(obj==null){return "login";}else{return invocation.invoke();//調用動作方法}}3、攔截器定義好后,一定要在配置文件中進行注冊:<interceptors> 只是定義攔截器,并沒有起作用?<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"> ? ? ? ?</interceptor></interceptors>4、配置文件中的動作,要通過<interceptor-ref name="permissionInterceptor"></interceptor-ref>使用該攔截器注意:一旦動作中使用了自定義的攔截器,那么默認的就不起作用了。一般應該采用如下的做法:<interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="permissionInterceptor"></interceptor-ref>多個動作類都要使用的話,可以通過package來進行組合。三、用戶輸入數據的驗證1、手工編程驗證,針對該動作類中的所有的動作方法步驟:a、動作類繼承ActionSupportb、覆蓋調用public void validate()方法c、在validate方法中,編寫不符合要求的代碼判斷,并調用父類的addFieldError(String fieldName,String errorMessage)如果fieldError(存放錯誤信息的Map)有任何的元素,就是驗證不通過,動作方法不會執行。Struts2框架會返回到name=input的resultd、在name=input指定的頁面上使用struts2的標簽顯示錯誤信息。<s:fielderror/>實例演示代碼:public class UserAction extends ActionSupport implements Serializable { private String username;//用戶名不能為空,還要去掉首尾空格 private String password;//3~6位的數字 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String add(){ System.out.println("執行了user的add方法"); return SUCCESS; } public String update(){ System.out.println("執行了user的update方法"); return SUCCESS; } @Override public void validate() {//驗證方法。只考慮不符合條件的 if(username==null||"".equals(username.trim())){ addFieldError("username", "用戶名不能為空"); } if(password==null||!password.matches("\\d{3,6}")){ addFieldError("password", "密碼不能為空且必須是3~6位的數字"); } } }
轉載于:https://www.cnblogs.com/toge/p/6114721.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原创] Easy SysLite V1
- 下一篇: 陪伴式编辑器