在Struts中應用Validator進行兩個欄位的比較的方法。
在struts中進行採用Validator進行輸入驗證有很多好處,完全可以透過修改XML檔案來根據客戶的要求定製資料驗證而不用修改程式碼。但是Valiator沒有提供現成的進行兩個欄位比較的驗證方法,如驗證輸入密碼和確認密碼一致,後面的日期必須大於前面的日期等等。下面是我實現的兩個欄位進行比較的驗證方法,可以進行兩個欄位是字串、日期、數字型別的資料的比較。下面是我的實現方法,望指正:
package com.sysway.quintum.validator; import java.io.Serializable; import java.util.Date; import java.text.SimpleDateFormat; import java.text.DecimalFormat; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.commons.validator.Field; import org.apache.commons.validator.GenericTypeValidator; import org.apache.commons.validator.GenericValidator; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorUtil; import org.apache.struts.action.ActionErrors; import org.apache.struts.validator.Resources; import com.sysway.quintum.validator.WrapData; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: Sysway Co.Ltd</p> * @author chen jianxiong * @version 1.0 * @usage: *<validator name="compareTwoFields" classname="com.sysway.quintum.validator.CompareTwoFieldsValidator" method="validateTwoFields" msg="errors.twofields"/> <field property="password" depends="required,twofields"> <arg0 key="typeForm.password.displayname"/> <var> <var-name>secondField</var-name> <var-value>confirmedPassword</var-value> </var> <var> <var-name>dataType</var-name> <var-value>String</var-value> </var> <var> <var-name>logicOperate</var-name> <var-value>Great</var-value> </var> <var> <var-name>pattern</var-name> <var-value>yyyy-mm-dd</var-value> </var> </field> * @logicOperate:equal, greaterEqual, greaterThan, lessEqual, lessThan, notEqual * @dataType:String,date,Number * @pattern:yyyy-mm-dd */ public class CompareTwoFieldsValidator implements Serializable { public static boolean validateTwoFields(Object bean, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) { String firstFieldValue = ValidatorUtil.getValueAsString(bean, field.getProperty()); String secondFieldName = field.getVarValue("secondField"); String secondFieldValue = ValidatorUtil.getValueAsString(bean, secondFieldName); if (!GenericValidator.isBlankOrNull(firstFieldValue) && !GenericValidator.isBlankOrNull(secondFieldValue)) { String logicOperate = field.getVarValue("logicOperate"); String dataType = field.getVarValue("dataType"); String pattern = field.getVarValue("pattern"); // System.out.println("firstFieldValue:" + firstFieldValue + "," + // "secondFieldName:" + secondFieldName + "," + // "secondFieldValue:" + secondFieldValue + "," + // "logicOperate:" + logicOperate + "," + // "dataType:" + dataType + "," + // "pattern:" + pattern); Object oValue1 = null, oValue2 = null; try { if (dataType.equals("Number")) { DecimalFormat df = new DecimalFormat(); oValue1 = df.parse(firstFieldValue); oValue2 = df.parse(secondFieldValue); } else if (dataType.equals("Date")) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); oValue1 = sdf.parse(firstFieldValue); oValue2 = sdf.parse(secondFieldValue); } else { oValue1 = (String ) firstFieldValue; oValue2 = (String ) secondFieldValue; } } catch (Exception ex) { ex.printStackTrace(); return false; } try { if (logicOperate.equals("equal")) { if (WrapData.compareTo(oValue1, oValue2) == WrapData.EQUAL) return true; else { errors.add(field.getKey(), Resources.getActionError(request, va, field)); return false; } } else if (logicOperate.equals("greaterThan")) { if (WrapData.compareTo(oValue1, oValue2) == WrapData.GREATERTHAN) return true; else { errors.add(field.getKey(), Resources.getActionError(request, va, field)); return false; } } else { errors.add(field.getKey(), Resources.getActionError(request, va, field)); return false; } /* else if (logicOperate.equals("greaterEqual")) { } else if (logicOperate.equals("lessEqual")) { } else if (logicOperate.equals("lessThan")) { } else if (logicOperate.equals("notEqual")) { }*/ } catch (Exception e) { errors.add(field.getKey(), Resources.getActionError(request, va, field)); return false; } } else { errors.add(field.getKey(), Resources.getActionError(request, va, field)); return false; } } } <p class="indent"> |
相關文章
- Oracle dblink比較兩個庫中的表欄位Oracle
- 同一張表的兩個欄位比較查詢
- spring data mongo比較兩個欄位查詢SpringGo
- 在java中進行日期時間比較的4種方法Java
- MySQL中NULL欄位的比較問題MySqlNull
- sql server中對日期欄位值的比較SQLServer
- MySQL把字串欄位轉換為日期型別進行比較MySql字串型別
- Java Optional的orElse()與orElseGet()兩個方法比較 - BaeldungJava
- Rust與Go在區塊鏈中的應用比較 - definoobsRustGo區塊鏈
- Oracle與SQL Server在企業應用中的比較(轉)OracleSQLServer
- 在Linux中,如何比較兩個檔案差異?Linux
- 比較所有的欄位型別型別
- 執行緒等待兩種方法的喚醒的效率比較執行緒
- 用VBS比較兩個Excel檔案的資料Excel
- 比較兩個陣列中是否有相同的元素陣列
- 用java.util.Collections中的sort方法對兩個類的物件進行排序Java物件排序
- 如何找出兩個文字檔案中有相同欄位的行
- C語言-對一個結構體中的欄位進行排序C語言結構體排序
- Oracle中spool命令實現的兩種方法比較-入門Oracle
- 介紹一個使用 cl_abap_corresponding 進行兩個內表不同名稱欄位賦值的快捷方法賦值
- Java 兩個日期比較Java
- python清空字典的兩種方法比較Python
- iptables在網路中的兩個經典應用(轉)
- Java 如何找出兩個文字檔案中有相同欄位的行Java
- struts的validator如何校驗jsp中的arraylistJS
- SAP CRM Fiori應用如何啟用Sales Office和Sales Group兩個欄位
- 利用compareTo方法進行字串比較排序字串排序
- java中利用hanlp比較兩個文字相似度的步驟JavaHanLP
- SQL中欄位比較型別不匹配錯誤:‘cannot be cast to’SQL型別AST
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- javascript比較兩個時間日期的大小JavaScript
- 比較兩個資料庫的差異資料庫
- 比較兩個的表結構差異
- 比較兩個表的資料差別
- 輸入兩個長度相同的字串,比較兩個數在相同位置的字元是否相同字串字元
- Cesium 比較常用的幾個方法
- 機器學習在金融比賽中的應用機器學習
- 四種在Javascript比較物件的方法JavaScript物件