Javaphua Blog

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            46 Posts :: 5 Stories :: 46 Comments :: 0 Trackbacks

          正則表達式(經(jīng)典) "^\d+$"  //非負整數(shù)(正整數(shù) + 0) "^[0-9]*[1-9][0-9]*$"  //正整數(shù) "^\d+$"  //非負整數(shù)(正整數(shù) + 0) "^[0-9]*[1-9][0-9]*$"  //正整數(shù) "^((-\d+)|(0+))$"  //非正整數(shù)(負整數(shù) + 0) "^-[0-9]*[1-9][0-9]*$"  //負整數(shù) "^-?\d+$"    //整數(shù) "^\d+(\.\d+)?$"  //非負浮點數(shù)(正浮點數(shù) + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數(shù) "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮點數(shù)(負浮點數(shù) + 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數(shù) "^(-?\d+)(\.\d+)?$"  //浮點數(shù) "^[A-Za-z]+$"  //由26個英文字母組成的字符串 "^[A-Z]+$"  //由26個英文字母的大寫組成的字符串 "^[a-z]+$"  //由26個英文字母的小寫組成的字符串 "^[A-Za-z0-9]+$"  //由數(shù)字和26個英文字母組成的字符串 "^\w+$"  //由數(shù)字、26個英文字母或者下劃線組成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" ( 2006年09月28日, 05:24:42 下午 CST )Permalink留言 [0]

          使用AJAX的Struts驗證框架   實時數(shù)據(jù)驗證是AJAX技術(shù)的一大優(yōu)勢之一。通過應(yīng)用此技術(shù),struts驗證框架將增強struts MVC,并使Web應(yīng)用程序更接近于桌面應(yīng)用程序。  此驗證框架用于驗證字段。有許多在Web應(yīng)用程序上進行驗證的方法。這些方法可分為兩類:服務(wù)器端方法和客戶端方法。Struts驗證框架是面向基于Java的Web應(yīng)用環(huán)境的最佳框架之一。它能夠配置應(yīng)用程序,方法是使用服務(wù)器端驗證和錯誤消息,此錯誤消息在處理請求時呈現(xiàn)在調(diào)用的驗證流程上,它還能夠進行客戶端驗證,方法是使用請求頁面上呈現(xiàn)的JavaScript。  AJAX是一種JavaScript技術(shù),它能夠異步呼叫服務(wù)器并獲取XML文檔,這類文檔最近非常流行。其用途之一就是實時數(shù)據(jù)驗證。  本文關(guān)注使用AJAX增強現(xiàn)有struts驗證框架。必須開發(fā)幾個組件(例如控制器),以選擇驗證框架,并呈現(xiàn)特定格式的消息(用于客戶端)和標簽庫(處理錯誤消息呈現(xiàn))。必要條件  需要一個具有Eclipse和Tomcat應(yīng)用服務(wù)器的Windows系統(tǒng)。請確定已在操作系統(tǒng)中注冊了MSXML 3.0 ActiveX對象。還需要Struts庫(http://struts.apache.org)和JDOM庫(www.jdom.org),以用于XML開發(fā)(參見圖1和圖2)。 服務(wù)器端場景 StrustsActionServlet   我們必須擴展來自org.apache.struts.action.ActionServlet的類,以獲得servletMapping變量,此變量存儲關(guān)于如何針對動作類將該擴展格式化為瀏覽器地址形式的動作路徑的信息。當添加代碼時,我們必須將web.xml配置為應(yīng)用服務(wù)器的Web應(yīng)用程序描述符。  web.xml配置如下:  ... actionnet.sf.struts.servlet.StrutsActionServlet ... action*.do... StrutsActionServlet Java代碼如下: public class StrutsActionServlet extends the ActionServlet. { public String getServletMapping() { return this.servletMapping; } } AjaxValidationRequestProcessor   要在第一步中支持現(xiàn)有Struts框架,我們必須擴展來自Struts軟件包的RequestProcessor。我們必須定制化此請求處理器,因為我們必須判別將如何進行驗證(通過使用現(xiàn)有Struts框架,還是利用AJAX概念),還因為我們將在服務(wù)器和客戶端之間制訂一個有關(guān)如何解釋消息的契約。在消息呈現(xiàn)方面,我們將使用XML格式,這是一種很好的媒體消息傳遞格式。我們將應(yīng)用的XML格式的定義是:  XML Format   XML Format MessageValue 描述 ? Identity是客戶端JavaScript用于了解消息將被置于何處的ID。 ? Description是在服務(wù)器端呈現(xiàn)錯誤消息后的結(jié)果。   首先我們需要在繼續(xù)流程映射之前,從Web描述符獲得servlet映射配置。調(diào)用此流程后,應(yīng)用程序?qū)蕚浔韱螌嵗藢嵗^承自AjaxForm類。這一處理管理AJAX驗證,并且應(yīng)進行檢查以確定來自客戶端的請求沒有使用struts驗證框架。其他在請求過程中執(zhí)行的流程是流程填充(用于收集客戶端發(fā)送到動作表單的信息)和流程驗證(通過使用現(xiàn)有Struts驗證框架中已經(jīng)存在于AjaxValidationRequestProcessor的父類TilesRequestProcessor中的方法)。  來自TilesRequestProcessor的驗證流程將調(diào)用所有基于struts驗證框架的驗證,并將動作錯誤存儲到請求。我們需要仔細分析動作錯誤,并生成XML消息驗證,此驗證將被發(fā)送到客戶端。因為我們希望更改支持驗證的行為方式,所以驗證流程應(yīng)檢查所用的驗證框架的指示器(參見圖3)。   使用JDOM作為處理引擎,生成XML消息。如圖4所示,如果流程驗證被調(diào)用,且驗證框架的條件等同于AJAX驗證框架,則流程將繼續(xù)填充錯誤消息并構(gòu)建XML消息驗證。 ErrorMessageHandler   該類處理XML消息生成器的功能。此Java類將構(gòu)建基于identity和description屬性的XML消息。調(diào)用方調(diào)用了buildXMLMessage之后,它將準備文檔并設(shè)置XML消息的根元素。此類還具有一個addNextXMLMessage函數(shù),以將更多驗證消息添加到XML(參見清單1)。   清單1   ... public void buildXMLMessage() throws ParserConfigurationException { // initiate document builder to prepare the media of XML Message this.rootElement = new Element(CONSTANT_MESSAGE); addNextXMLMessage(); } ... public void addNextXMLMessage() throws ParserConfigurationException { // creating the xml message based on format above Element identityElement = new Element(CONSTANT_IDENTITY); identityElement.setAttribute(CONSTANT_NAME, this.identity); Element descriptionElement = new Element(CONSTANT_DESCRIPTION); descriptionElement.addContent(this.description); identityElement.addContent(descriptionElement); rootElement.addContent(identityElement); }   此流程方法將響應(yīng)的內(nèi)容類型設(shè)置為“text/xml”,并將XML消息作為字符串發(fā)送。AjaxValidationRequestProcessor代碼上的流程函數(shù)如清單2所示。   清單2   public void process(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { if ( request.getParameter(CONSTANT_VALIDATION_FRAMEWORK_ARG) != null ) { ... this.processValidate(req, resp, form, mapping); response.setContentType(CONSTANT_XML_CONTENT_TYPE); response.getWriter().write(sbXMLMessage.toString()); response.flushBuffer(); } } else { super.process(req, resp); } } processValidation方法將填充  動作錯誤,并基于面向客戶端的XML格式契約構(gòu)建消息。AjaxValidationRequestProcessor代碼上的processValidation函數(shù)如下所示:  ... ActionErrors errors = (ActionErrors) request.getAttribute(Globals.ERROR_KEY); Locale locale = (Locale) request.getAttribute(Globals.LOCALE_KEY); generateXMLMessage(errors, identity, locale, sbXMLMessage); ... 客戶端場景構(gòu)建標簽庫組件 ? AjaxJavaScriptLibraryTag:此標簽庫組件在客戶端呈現(xiàn)JavaScript功能,以實現(xiàn)基本XMLHTTP控制器功能。 ? AjaxErrorHtmlRenderTag:此標簽庫組件在JSP頁面呈現(xiàn)錯誤消息區(qū)域。 配置標簽庫定義  開發(fā)出標簽庫組件之后,我們需要配置清單3中顯示的標簽庫tld文件。   清單3   1.01.1ajaxLiblibrarynet.sf.ajax.taglib.AjaxJavaScriptLibrary JSPerrornet.sf.ajax.taglib.AjaxErrorHtmlRender JSPpropertytruetrueeventtruetrue構(gòu)建JSP和Struts配置  要模擬驗證處理的結(jié)果,我們首先需要構(gòu)建呈現(xiàn)層,方法是合并我們已經(jīng)構(gòu)建的標簽庫。在此例中,我試圖給出一個示例驗證(通過使用來自Struts的驗證規(guī)則組件)以及來自表單本身的驗證。準備五個JSP頁面下的文本框。第一個到第四個文本框使用驗證規(guī)則配置,第五個文本框使用來自動作表單的驗證流程。除此之外,我們還需要一個提交按鈕,以在提交表單后模擬它,現(xiàn)有的struts驗證仍在沒有AJAX的情況下工作。用戶界面外觀如圖5所示。 構(gòu)建動作和動作表單  為獲得Struts動作,我們轉(zhuǎn)到已經(jīng)構(gòu)建的JSP。此動作代碼如下所示:  public ActionForward execute(...) { return mapping.findForward("success"); }   如果輸入為空,則此動作表單代碼將驗證requiredText屬性。請記住,要從AjaxForm類擴展此表單。動作表單的驗證方法如下所示:  public ActionErrors validate(...) { ActionErrors errors = new ActionErrors(); if (StringUtils.isEmpty(this.requiredText)) { errors.add("requiredText", new ActionError("error.required.input")); } request.setAttribute(Globals.ERROR_KEY, errors); } 應(yīng)用Struts驗證規(guī)則  配置Struts驗證規(guī)則(例如最小長度、最大長度、電子郵件和模式文本)將應(yīng)用于客戶端的輸入對象,且配置與清單4類似。   清單4   mask^[0-9]{3}-[0-9]{2}$minlength5maxlength5驗證處理流  首先客戶端會初始化XMLHTTP組件以執(zhí)行到服務(wù)器的請求,然后在用戶觸發(fā)器開始構(gòu)建時,URL參數(shù)將被發(fā)送到服務(wù)器。在完成構(gòu)建參數(shù)后,客戶端會連接oneadystatechange XMLHTTP事件,以偵聽來自服務(wù)器端的響應(yīng)。收到響應(yīng)后,客戶端會開始分析XML驗證消息,并將消息放置到正確的區(qū)域(參見圖6)。   如果請求被服務(wù)器接受,則服務(wù)器會開始檢查AJAX驗證條件的參數(shù),并處理驗證。完成之后,將從生成的錯誤對象過濾出與用戶輸入對象相關(guān)的特定錯誤。在過濾流程完成之后,將生成XML消息,并發(fā)送回客戶端(參見圖7)。 結(jié)束語  在本文中,我們構(gòu)建了一個控制器,它能夠接收來自客戶端的異步請求,并合并struts驗證流程以產(chǎn)生動作錯誤對象。在產(chǎn)生錯誤對象并生成作為應(yīng)答返回客戶端以指示錯誤消息的XML消息之后,將對被驗證的特定輸入對象進行過濾

          posted on 2006-10-09 00:29 Javaphua 閱讀(381) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 平远县| 中宁县| 扬中市| 宁城县| 长治市| 广南县| 铁岭市| 八宿县| 昌平区| 承德市| 西峡县| 兰西县| 巴南区| 额敏县| 彰化县| 铜梁县| 杭锦旗| 南通市| 湟源县| 那坡县| 葫芦岛市| 巴彦县| 屏山县| 南雄市| 泌阳县| 常熟市| 东明县| 山阳县| 抚顺市| 贺兰县| 乌兰浩特市| 彩票| 溧阳市| 二连浩特市| 渑池县| 河北省| 册亨县| 吐鲁番市| 琼结县| 博野县| 轮台县|