<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆:45 文章:5 評論:25 引用:0
    BlogJava 首頁 發新隨筆
    發新文章 聯系 聚合管理

    2009年1月7日

    由于是別的人文章,在此就記下個LINK吧 http://blog.csdn.net/ferry_passion/article/details/7607489
    posted @ 2012-07-25 21:42 Hill 閱讀(251) | 評論 (0)編輯 收藏
     
    快過年了,但在2011年還有不到2個月的時候,發篇隨筆吧~
    今年的計劃到目前看,都基本實現了。但是,我知道,挑戰和未來的規劃也已經開始。
    以后一段日子本人將專注分布式應用的學習和研究,希望能與大家分享一下心得體會吧。本論壇的高手很多,也希望能得到你們的指導。
    分布式計算、分布式存儲、虛擬化技術---->新的系統分析、設計方式;OSGI/Hadoop/Hbase....

    今年過年也有很重要的事要做~期待中~
    posted @ 2011-11-19 11:32 Hill 閱讀(351) | 評論 (1)編輯 收藏
     
         摘要: ORA-01461: can bind a LONG value only for insert into a LONG column(點睛)  閱讀全文
    posted @ 2009-10-13 15:11 Hill 閱讀(2261) | 評論 (0)編輯 收藏
     
         摘要: set_context與set_identifier  閱讀全文
    posted @ 2009-09-04 17:32 Hill 閱讀(347) | 評論 (0)編輯 收藏
     
         摘要: Ibatis中#和$兩個符號的使用區別  閱讀全文
    posted @ 2009-09-01 17:45 Hill 閱讀(1885) | 評論 (0)編輯 收藏
     
         摘要: java這樣也能寫,我還真沒用過。學習學習  閱讀全文
    posted @ 2009-07-15 16:16 Hill 閱讀(318) | 評論 (0)編輯 收藏
     
         摘要: 在很多大型應用中都會對數據進行切分,并且采用多個數據庫實例進行管理,這樣可以有效提高系統的水平伸縮性。而這樣的方案就會不同于常見的單一數據實例的方案,這就要程序在運行時根據當時的請求及系統狀態來動態的決定將數據存儲在哪個數據庫實例中,以及從哪個數據庫提取數據。  閱讀全文
    posted @ 2009-07-11 19:24 Hill 閱讀(321) | 評論 (0)編輯 收藏
     
         摘要: 很多人在進行數據遷移時,希望把數據導入不同于原系統的表空間,在導入之后卻往往發現,數據被導入了原表空間。
    本例舉例說明解決這個問題:  閱讀全文
    posted @ 2009-07-11 11:44 Hill 閱讀(258) | 評論 (0)編輯 收藏
     
         摘要: 很多人在進行數據遷移時,希望把數據導入不同于原系統的表空間,在導入之后卻往往發現,數據被導入了原表空間。
    本例舉例說明解決這個問題:  閱讀全文
    posted @ 2009-07-11 11:44 Hill 閱讀(230) | 評論 (0)編輯 收藏
     
         摘要: 根據項目需要,最近在做一個關于owc透視表的功能(PivotTable),這個東西啊讓我可是郁悶了將近10天,網上很多資源都是直接連接數據源的方式,但對于實現系統開發來說,不實用,因為b/s系統多數是分層架構,并且部署實施時,很難由客戶端直接向數據庫服務器發出請求。原因就不多說了。
      閱讀全文
    posted @ 2009-07-02 12:02 Hill 閱讀(877) | 評論 (2)編輯 收藏
     
         摘要: Struts2上傳文件  閱讀全文
    posted @ 2009-06-15 17:41 Hill 閱讀(264) | 評論 (0)編輯 收藏
     
         摘要: 注意:在jdk1.4下運行時,不要多加jar包。struts2-core,xwork這兩個轉換成jdk1.4下的版本后,別的不會再轉了。如果使用別的包時,轉一個加一個試試,struts2在加入jar包時,可能有問題,使用時小心。  閱讀全文
    posted @ 2009-06-12 15:40 Hill 閱讀(1258) | 評論 (0)編輯 收藏
     
         摘要: 在jsp中操作FCKeditor  閱讀全文
    posted @ 2009-06-09 14:34 Hill 閱讀(446) | 評論 (0)編輯 收藏
     
         摘要: row_number() /rank()/dense_rank()學習之二  閱讀全文
    posted @ 2009-06-08 14:27 Hill 閱讀(140) | 評論 (0)編輯 收藏
     
         摘要: ORACLE分析函數學習  閱讀全文
    posted @ 2009-06-08 14:04 Hill 閱讀(204) | 評論 (0)編輯 收藏
     
         摘要: Selecting the first n rows with Oracle  閱讀全文
    posted @ 2009-06-08 11:56 Hill 閱讀(181) | 評論 (0)編輯 收藏
     
         摘要: document.selection.createRange方法  閱讀全文
    posted @ 2009-05-31 13:51 Hill 閱讀(11250) | 評論 (3)編輯 收藏
     
         摘要: 處理中文問題  閱讀全文
    posted @ 2009-05-27 17:16 Hill 閱讀(1968) | 評論 (0)編輯 收藏
     
         摘要: 向原作者學習一下,從感性上  閱讀全文
    posted @ 2009-05-27 14:59 Hill 閱讀(107) | 評論 (0)編輯 收藏
     
         摘要: 在以前的一篇文中介紹到,當用parameterMap作為ibatis映射輸入參數時,要在ibatis的配置文件中
    作相應的聲明。但我們也可以不在ibatis映射文件中作聲明,應用方法如下:   閱讀全文
    posted @ 2009-05-27 14:06 Hill 閱讀(3440) | 評論 (0)編輯 收藏
     
         摘要: 關于自動完成的別人的例子,學習一下。  閱讀全文
    posted @ 2009-05-08 15:27 Hill 閱讀(178) | 評論 (0)編輯 收藏
     
         摘要: 今天遇到要用replaceAll(),看到很多人對其也有困惑.我在此記錄下來  閱讀全文
    posted @ 2009-04-29 10:59 Hill 閱讀(116734) | 評論 (5)編輯 收藏
     

    今天打算啟用一下Oracle Database 11g的Database Control,發現初始并未安裝:

    [oracle@test126 ~]$ emctl start
    EM Configuration issue. /opt/oracle/product/11.1.0/test126.hurray.com.cn_dodd not found.

     

    遇到這類問題,可以通過重新配置,來創建EM的配置文件:

    [oracle@test126 11.1.0]$ emca -config dbcontrol db -repos recreate

     

    STARTED EMCA at Aug 28, 2007 11:54:40 AM
    EM Configuration Assistant, Version 11.1.0.5.0 Production
    Copyright (c) 2003, 2005, Oracle. All rights reserved.

    Enter the following information:
    Database SID: dodd
    Listener port number: 1521
    Password for SYS user:
    Password for DBSNMP user:
    Password for SYSMAN user:
    Password for SYSMAN user: Email address for notifications (optional): eygle@eygle.com
    Outgoing Mail (SMTP) server for notifications (optional):
    -----------------------------------------------------------------

    You have specified the following settings

    Database ORACLE_HOME ................ /opt/oracle/product/11.1.0

    Local hostname ................ test126.hurray.com.cn
    Listener port number ................ 1521
    Database SID ................ dodd
    Email address for notifications ............... eygle@eygle.com
    Outgoing Mail (SMTP) server for notifications ...............

    -----------------------------------------------------------------
    Do you wish to continue? [yes(Y)/no(N)]: Y
    Aug 28, 2007 11:56:58 AM oracle.sysman.emcp.EMConfig perform
    INFO: This operation is being logged at /opt/oracle/cfgtoollogs/emca/dodd/emca_2007_08_28_11_54_40.log.
    Aug 28, 2007 11:57:01 AM oracle.sysman.emcp.EMReposConfig invoke
    INFO: Dropping the EM repository (this may take a while) ...
    Aug 28, 2007 11:57:16 AM oracle.sysman.emcp.EMReposConfig invoke
    INFO: Repository successfully dropped
    Aug 28, 2007 11:57:16 AM oracle.sysman.emcp.EMReposConfig createRepository
    INFO: Creating the EM repository (this may take a while) ...


    Aug 28, 2007 12:08:35 PM oracle.sysman.emcp.EMReposConfig invoke
    INFO: Repository successfully created
    Aug 28, 2007 12:08:47 PM oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository
    INFO: Uploading configuration data to EM repository (this may take a while) ...
    Aug 28, 2007 12:11:45 PM oracle.sysman.emcp.EMReposConfig invoke
    INFO: Uploaded configuration data successfully
    Aug 28, 2007 12:11:51 PM oracle.sysman.emcp.util.DBControlUtil configureSoftwareLib
    INFO: Software library configured successfully.
    Aug 28, 2007 12:11:51 PM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
    INFO: Deploying Provisioning archives ...
    Aug 28, 2007 12:12:13 PM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
    INFO: Provisioning archives deployed successfully.
    Aug 28, 2007 12:12:13 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
    INFO: Securing Database Control (this may take a while) ...
    Aug 28, 2007 12:12:39 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
    INFO: Database Control secured successfully.
    Aug 28, 2007 12:12:39 PM oracle.sysman.emcp.util.DBControlUtil startOMS
    INFO: Starting Database Control (this may take a while) ...
    Aug 28, 2007 12:14:04 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration
    INFO: Database Control started successfully
    Aug 28, 2007 12:14:04 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration
    INFO: >>>>>>>>>>> The Database Control URL is https://test126.hurray.com.cn:1158/em <<<<<<<<<<<
    Aug 28, 2007 12:14:16 PM oracle.sysman.emcp.EMDBPostConfig invoke
    WARNING:
    ************************ WARNING ************************

    Management Repository has been placed in secure mode wherein Enterprise Manager data will be encrypted. The encryption key has been placed in the file: /opt/oracle/product/11.1.0/test126.hurray.com.cn_dodd/sysman/config/emkey.ora. Please ensure this file is backed up as the encrypted data will become unusable if this file is lost.

    ***********************************************************
    Enterprise Manager configuration completed successfully
    FINISHED EMCA at Aug 28, 2007 12:14:16 PM

     

    Oracle 10g中,配置方法與此相同。
    配置完成之后就可以啟動EM了:

    [oracle@test126 11.1.0]$ emctl start dbconsole
    Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0
    Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
    https://test126.hurray.com.cn:1158/em/console/aboutApplication
    Starting Oracle Enterprise Manager 11g Database Control ........ started.
    ------------------------------------------------------------------
    Logs are generated in directory /opt/oracle/product/11.1.0/test126.hurray.com.cn_dodd/sysman/log

     

    如果是Linux環境,你可能還需要在iptables中開放1158端口,增加如下一行:
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1158 -j ACCEPT

    重新啟動防火墻之后就可以通過IE在遠端連接EM的Database Control了:

    [root@test126 sysconfig]# service iptables restart
    Flushing firewall rules: [ OK ]
    Setting chains to policy ACCEPT: filter [ OK ]
    Unloading iptables modules: [ OK ]
    Applying iptables firewall rules: [ OK ]
    Loading additional iptables modules: ip_conntrack_netbios_ns [ OK ]

     


    -The End-

    posted @ 2009-04-23 15:13 Hill 閱讀(868) | 評論 (0)編輯 收藏
     
         摘要: 簡單來說序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化,流的概念這里不用多說(就是I/O),我們可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸于網絡之間(注:要想將對象傳輸于網絡必須進行流化)!在對對象流進行讀寫操作時會引發一些問題,而序列化機制正是用來解決這些問題的!
      閱讀全文
    posted @ 2009-03-12 15:11 Hill 閱讀(557) | 評論 (1)編輯 收藏
     
         摘要: 是Logic 標簽庫中最復雜的標簽,也是用途最廣的一個標簽,它能夠在一個循環中遍歷數組、Collection、Enumeration、Iterator 或 Map 中的所有元素。   閱讀全文
    posted @ 2009-03-09 10:34 Hill 閱讀(1522) | 評論 (0)編輯 收藏
     
         摘要: Tiles框架為創建Web頁面提供了一種模板機制,它能將網頁的布局和內容分離。它允許先創建模板,然后在運行時動態地將內容插入到模板中。Tiles 框架建立在JSP的include指令的基礎上,但它提供了比JSP的 include指令更強大的功能  閱讀全文
    posted @ 2009-03-06 11:20 Hill 閱讀(322) | 評論 (0)編輯 收藏
     
         摘要: 大家都清楚在用PowerDesigner的時候,當你輸入Name的時候Code是會自動幫你按照Name的內容填上的.

    這個功能雖然好用,但是我需要在Name這一項加上一個中文的注釋,這個時候怎么辦呢?

    下面兩個例子,相信對你相當有用.  閱讀全文
    posted @ 2009-03-02 17:45 Hill 閱讀(1498) | 評論 (0)編輯 收藏
     
         摘要: 近來讀了一篇《怎樣成為優秀的軟件模型設計者》的文章,感觸頗深。仔細對比分析,發現原來我自己和周圍的軟件開發人員平常的一些自認為對的做法,有很多是有問題的。  閱讀全文
    posted @ 2009-02-25 18:20 Hill 閱讀(180) | 評論 (0)編輯 收藏
     
         摘要: 第一次感覺到“分享”的重要性,過去,只會想辦法去獲得,卻沒有意識到“分享”是更加值得去“獲得”的能力與心態  閱讀全文
    posted @ 2009-02-25 18:06 Hill 閱讀(129) | 評論 (0)編輯 收藏
     
    <a href="javascript:self.close()">close</a>
    <!--IE7 -->
    <a href="javascript:window.open('','_self','');window.close();">direct close</a>
    <!--IE6-->
    <input type="button" value="click" onclick="javascript:window.opener=null;window.close();return false;">
    posted @ 2009-02-24 15:11 Hill 閱讀(123) | 評論 (0)編輯 收藏
     
         摘要: 學習JavaMail可以借鑒一下。用到時,可以參考  閱讀全文
    posted @ 2009-02-23 17:50 Hill 閱讀(180) | 評論 (0)編輯 收藏
     
         摘要: 介紹了oracle9i的xmltype數據類型的基本使用
    包括:建立含有xmltype數據類型的表
    插入(insert)數據
    查詢(select)數據
    更新(update)數據
    添加超過4k字節的xml文檔到xmltype型字段
    適合初學者。
      閱讀全文
    posted @ 2009-02-13 11:27 Hill 閱讀(2086) | 評論 (0)編輯 收藏
     
         摘要: RAC就是real application clusters的縮寫,Oracle Real Application Clusters (RAC)可以支持24 x 7 有效的數據庫應用 系統,您可以在由低成本的服務器構成的高可用性系統上自由部署您的應用,而無需修改您的應用程序。已經有超過4200個用戶從中受益?,F在Oracle在 10g RAC中更提供免費的集群軟件和存儲管理軟件,為您降低應用成本。擁有RAC您無需再為成本而犧牲性能和 可靠性。
      閱讀全文
    posted @ 2009-02-04 10:39 Hill 閱讀(824) | 評論 (0)編輯 收藏
     
         摘要: 新人新問題,感覺問問自己這些問題,也算是指明一個學習方向吧,感覺也不容易啊,努力學習中  閱讀全文
    posted @ 2009-02-03 11:13 Hill 閱讀(408) | 評論 (8)編輯 收藏
     
         摘要: 本人是新人,要從頭學習起,希望老手們能介紹經驗啊,謝謝  閱讀全文
    posted @ 2009-02-03 11:11 Hill 閱讀(229) | 評論 (0)編輯 收藏
     
         摘要: 刪 除 數 據
    刪除表中數據的方法有兩種,在指定的表或視圖中刪除滿足給定條件的數據可以使用DELETE語句;如果要清除表中全部數據,則還可以使用TRUNCATE TABLE語句  閱讀全文
    posted @ 2009-02-03 11:04 Hill 閱讀(1563) | 評論 (4)編輯 收藏
     
    1Z0-042
    安裝和配置 Oracle Database 10g
    監控和維護 Oracle Database 10g,并排除 Oracle Database 10g 中的故障
    為 Oracle Database 10g 配置 Oracle Net Services
    Oracle Database 10g 的備份和恢復
    在 Oracle Database 10g 中創建和管理用戶賬戶
    1Z0-043
    使用 RMAN 創建和管理備份集和映像副本
    將數據庫恢復到過去某一時刻的狀態
    使用 Oracle 閃回技術恢復數據庫
    檢測塊損壞情況并采取相應的措施修復損壞的塊
    使用各種數據庫 Advisor 來監控和提高數據庫的性能
    使用資源管理器來控制數據庫資源的使用情況
    使用調度程序來簡化管理任務
    提高監聽程序的安全性
    復查數據庫日志文件以便進行診斷
    為數據庫和單獨的會話自定義基于語言的行為

    專題的研究如:RMAN、RAS、STATSPACT、 DATAGUARD、TUNING、BACKUP&RECOVER等等
    posted @ 2009-02-03 10:51 Hill 閱讀(172) | 評論 (0)編輯 收藏
     
         摘要: 我是剛參加工作不久的新人,想通過參加一些相關的認證提高自己的工作能力,希望大家給點意見,謝謝


    為了進一步提高Oracle認證的可選性,Oracle公司現在可以提供4種不同的認證,這些都是專為從事Oracle領域工作的人員包括DBA、開發人員以及管理人員所設計的  閱讀全文
    posted @ 2009-02-03 10:14 Hill 閱讀(147) | 評論 (0)編輯 收藏
     
         摘要: JdbcTemplate是core包的核心類。它替我們完成了資源的創建以及釋放工作,從而簡化了我們對JDBC的使用。它還可以幫助我們避免一些常見的錯誤,比如忘記關閉數據庫連接。JdbcTemplate將完成JDBC核心處理流程,比如SQL語句的創建、執行,而把SQL語句的生成以及查詢結果的提取工作留給我們的應用代碼。它可以完成SQL查詢、更新以及調用存儲過程,可以對ResultSet進行遍歷并加以提取。它還可以捕獲JDBC異常并將其轉換成org.springframework.dao包中定義的,通用的,信息更豐富的異常。

      閱讀全文
    posted @ 2009-01-13 18:07 Hill 閱讀(778) | 評論 (0)編輯 收藏
     
         摘要: 年關到了,商家忙著促銷,網站忙著推廣,阿里軟件的服務集成平臺也面臨第一次多方大規模的壓力考驗。根據該平臺5.3版本的壓力測試結果,我們估算了一下現有的推廣會帶來的壓力,基本上確定了服務集成平臺年底不需要擴容。SA(System Administrator,系統管理員)為了保險起見還是通過請求方式來做定時的心跳檢測,保證服務集成平臺的可靠性。結果阿里旺旺推廣開始的第一天,SA的報警短信就在幾個忙時段不停地發告警,但是查看生產環境的服務器狀況以及應用狀況后看不出有什么問題,于是開始懷疑是否告警機制不是很合理。幾日的訪問記錄統計報告看過以后,發現了幾個問題,首先由于推廣是在IM登錄時段集中式的推廣,因此高峰期比較集中,壓力也很大,而告警發生的時刻也是那些時候;另外發現那些推廣使用的API的處理時間比較長,同時還有些出現了問題,這幾天除了服務集成平臺告警以外,那些API服務器也在告警;因此可以看出問題應該是由于API提供商響應速度慢而拖累了服務集成平臺的處理能力,監控機制在高峰情況下沒有得到及時的響應,就認為是服務器已經處于無效狀態。  閱讀全文
    posted @ 2009-01-12 18:38 Hill 閱讀(200) | 評論 (0)編輯 收藏
     
         摘要: 原因:首先,JFreeChart和中文驗證碼的亂碼問題和jsp的編碼無關,是由于Java虛擬機找不到字體文件造成的,所以同類的Swing或者AWT的中文亂碼問題也適用

      閱讀全文
    posted @ 2009-01-12 17:18 Hill 閱讀(4050) | 評論 (0)編輯 收藏
     
         摘要: JFreeChart真是個好東西,今天剛剛學習了一下,以后要是用時,可以深入,大家要是不知道怎么在Web中畫出圖表,請參考,謝謝  閱讀全文
    posted @ 2009-01-12 16:41 Hill 閱讀(136) | 評論 (0)編輯 收藏
     

    Struts Validator驗證器使用指南


    驗證器:

    從0.5版,驗證器在一些form中就已經實現了,他最初包含在開發人員包中,后來核心代碼挪到Jakarta Commons包中和Struts特別擴展中作為 Struts 1.1的一部分。許多開發者為方便一直使用struts驗證器,這篇文檔首先概述驗證器的核心功能性,然后大概介紹在 struts1.1中的變化和新增功能。

    如果你配置好驗證器插件,你應該擴展ValidatorForm而不是ActionForm,以便它能加載你的Validator資源。他根據struts-config.xml文件中的action的name屬性為當前form的調用相應的驗證器,因此在validator-rules.xml中的form元素的名稱屬性應該與action的name屬性值相匹配。

    另外一種選擇是擴展ValidatorActionForm 而不是ValidatorForm,ValidatorActionForm使用struts-config.xml中action的path屬性,所以path屬性的值相應的應該與validator-rules.xml中的Form的name屬性匹配。

    一個分離的action可以定義給多頁form的每個頁面,而且驗證規則可以與action關聯而不是與頁碼,就像驗證范例中的多頁form范例那樣。
    國際化

    在validator-rules.xml 文件中form的驗證規則可以組織為FormSet。FormSet 有與java.util.Locale 類相應的屬性:如語言, 國家以及變量型屬性,如果他們未定義,FormSet 將把它設置為默認值。一個FormSet 也可以有關聯的常量。另外還可以定義與FormSet 同一級別的全局global元素,他與FormSet同樣也有常量。

    注意:你必須在國際化的FormSet前聲明一個沒有國際化的默認FormSet。這樣如果Validator沒有找到locale時可以有一個默認版本。

            可插入驗證器的默認錯誤信息值可以被msg元素覆蓋。所以為mask驗證器生成錯誤信息的替代方法就是使用msg屬性,如果字段的name屬性與驗證器的name屬性匹配,那末將使用字段的msg屬性。

            error messages的可以設置arg0-arg3 等參數元素。如果沒有設置arg0-arg3的name屬性, error messages將使用他們作為默認的構建參數值。如果設置了name屬性,你就可以把參數指定給一特定的可插入驗證器,然后這些參數將在構造錯誤信息時被使用。

    <field

    property="lastName"

    depends="required,mask">

    <msg

    name="mask"

    key="registrationForm.lastname.maskmsg"/>

    <arg0 key="registrationForm.lastname.displayname"/>

    <var>

    <var-name>mask</var-name>

    <var-value>^[a-zA-Z]*$</var-value>

    </var>

    </field>

    默認的arg0-arg3元素將在消息資源中查找相應的key,如果資源屬性設為false,她將把值直接傳進去,而不從消息資源中查找。注意1.1版本中,你必須為每個模塊中明確地定義在驗證中用到的消息資源,否則將使用top-level資源。

    <field

    property="integer"

    depends="required,integer,intRange">

    <arg0 key="typeForm.integer.displayname"/>

    <arg1

    name="range"

    key="${var:min}"

    resource="false"/>

    <arg2

    name="range"

    key="${var:max}"

    resource="false"/>

    <var>

    <var-name>min</var-name>

    <var-value>10</var-value>

    </var>

    <var>

    <var-name>max</var-name>

    <var-value>20</var-value>

    </var>

    </field>
    常量/變量

    全局的常量可以在全局標簽中定義,FormSet/本地常量能在formset 標簽中創建。常量當前僅僅是代替字段的property屬性,字段的var 元素的 value屬性,字段的msg 元素的 key屬性,字段的arg0-arg3 元素的 key屬性。字段的變量也可以在arg0-arg3 元素中被代替(例如:${var:min}))。替換的順序是FormSet/Locale常量第一,全局的常量第二,

    arg elements 變量最后。

    <global>

    <constant>

    <constant-name>zip</constant-name>

    <constant-value>^\d{5}(-\d{4})?$</constant-value>

    </constant>

    </global>

     

    <field

    property="zip"

    depends="required,mask">

    <arg0 key="registrationForm.zippostal.displayname"/>

    <var>

    <var-name>mask</var-name>

    <var-value>${zip}</var-value>

    </var>

    </field>

    驗證器可以使用字段下面的變量部分來存儲變量,這些變量通過字段的getVar((String key)方法取得。

    <field

    property="integer"

    depends="required,integer,intRange">

    <arg0 key="typeForm.integer.displayname"/>

    <arg1

    name="range"

    key="${var:min}" resource="false"/>

    <arg2

    name="range"

    key="${var:max}" resource="false"/>

    <var>

    <var-name>min</var-name>

    <var-value>10</var-value>

    </var>

    <var>

    <var-name>max</var-name>

    <var-value>20</var-value>

    </var>

    </field>
    使用validwhen設計復雜的驗證

    使用validwhen來設計復雜驗證的一個經常的要求就是根據一個字段驗證另外一個字段(比如, 如果你要用戶兩次輸入口令來確認值口令一致),另外一個就是表單中的一個字段只有另外一個字段有確定值的時候才是必須輸入的。新的validwhen驗證規則將很快被包含在1.1后的STRUTS版本中,她就是用來處理這種情況的。

            validwhen 規則處理單個的變量字段,叫測試。這變量的值是一個布爾的表達式,如果驗證有效則它必須為真??梢园@種變量的表達式有:

    u        單引號或雙引號字符串literals,

    u        十進制、十六進制、八進制的Integer literals,

    u        null與null和空字符串匹配,

    u        其它可以用屬性名引用的form字段,例如customerAge,

    u        可以在外部因用得索引字段, 例如childLastName[2],

    u        可以默認implicit因用得索引字段, 例如childLastName[], 她將作為被索引的字段使用同樣的索引到數組中,

    The literal *這里指它包含當前測試字段的值,

    作為例子,考慮一個包含通訊地址和郵箱字段的form。如果通訊地址不為空則郵箱字段是必須的required。你能這樣定義validwhen 規則:

    <field property="emailAddress" depends="validwhen">

    <arg0 key="userinfo.emailAddress.label"/>

    <var>

    <var-name>test</var-name>

    <var-value>((sendNewsletter == null) or (*this* != null))</var-value>

    </var>

    </field>

    上面定義的意思是:如果通訊地址是空或不空時這個字段時有效的。

    這里有個稍微復雜的例子,它使用了索引字段。假定有一個表單,允許用戶輸入他們希望定購的部件號和數量。類orderLine 的bean的一數組被用來在稱為orderLines 的一屬性保持輸入項。

    If you wished to verify that every line with part number also had a quantity entered, you could do it with:

    如果你希望校驗訂單中有數量輸入得每一行,你可以這樣:

    <field

    property="quantity"

    indexedListProperty="orderLines"

    depends="validwhen">

    <arg0 key="orderform.quantity.label"/>

    <var>

    <var-name>test</var-name>

    <var-value>((orderLines[].partNumber == null) or (*this* != null))</var-value>

    </var>

    </field>

    這里的意思是:如果相應的partNumber 字段是空, 或這字段是不空的,則這字段是有效的。

    最后一個例子,想象一表單,用戶必須輸入他們的以英寸為單位的高度,如果他們在高度在60英寸以下,則出一錯誤。(it is an error to have checked off nbaPointGuard as a career.)

    <field property="nbaPointGuard" depends="validwhen">

    <arg0 key="careers.nbaPointGuard.label"/>

    <var>

    <var-name>test</var-name>

    <var-value>((heightInInches >= 60) or (*this* == null))</var-value>

    </var>

    </field>

     

    給程序員的簡單說明:

    所有的比較關系必須在parens 封裝。All comparisons must be enclosed in parens.

    只有兩個itme時可以and或or鏈接。

    如果比較的兩item都可以轉為整數,則使用numeric比較,否則使用字符串比較。
    可插入驗證器

    驗證是從validation.xml 文件中加載的,默認的驗證規則定義在validation.xml 文件中,默認定義了required, mask ,byte, short, int, long, float, double, date (沒有本地支持), and a numeric range。

    " mask "方式依賴于默認值安裝要求,那意味著"required "可以完成,在"'mask "將運行以前"required "和" mask "方式被默認包含進框架中了。任何字段如果不是"required "而且是空或有零長度將跳過其他驗證。

    如果使用了Javascript 標簽,客戶端javascript在validator's javascript 屬性中查找值而且產生一個有驗證form方法的對象,要得到更多的關于Javascript Validator 標簽工作細節的詳細的解釋,參閱html標簽API參考。

    "'mask' "方式讓你用一正則表達式掩碼驗證字段,它使用jakarta的正規表達式包,所有的有效性規則存儲在validator-rules.xml 文件,使用的主類是org.apache.regexp.RE。

    validation.xml文件中的驗證器配置范例:

    <validator name="required"

    classname="org.apache.struts.validator.FieldChecks"

    method="validateRequired"

    methodParams="java.lang.Object,

    org.apache.commons.validator.ValidatorAction,

    org.apache.commons.validator.Field,

    org.apache.struts.action.ActionErrors,

    javax.servlet.http.HttpServletRequest"

    msg="errors.required">

    <validator name="mask"

    classname="org.apache.struts.validator.FieldChecks"

    method="validateMask"

    methodParams="java.lang.Object,

    org.apache.commons.validator.ValidatorAction,

    org.apache.commons.validator.Field,

    org.apache.struts.action.ActionErrors,

    javax.servlet.http.HttpServletRequest"

    msg="errors.invalid">


    定義可插入驗證器

    方法的參數是用逗號分隔的一些類名稱列表,方法屬性需要有一個符合上面的列表的簽名。列表由以下組合而成:

    java.lang.Object – 要驗證的Bean。

    org.apache.commons.validator.ValidatorAction – 當前ValidatorAction。

    org.apache.commons.validator.Field – 要驗證的字段

    org.apache.struts.action.ActionErrors – 如果驗證錯誤將加入ActionError的錯誤對象javax.servlet.http.HttpServletRequest –當前request 對象。

    javax.servlet.ServletContext – 應用的ServletContext。

    org.apache.commons.validator.Validator–當前的org.apache.commons.validator.Validator實例。

    java.util.Locale – 當前用戶的Locale。
    多頁面form

    字段部分有一可選的頁面屬性,它可以被設為整數,頁上字段的所有驗證小于或等于服務器端驗證的當前頁,頁上字段的所有驗證小于或等于客戶端頁上所有字段的驗證小于或等于服務器端驗證的當前頁驗證的當前頁。一個mutli-part表單需要定義頁面屬性:

    <html:hidden property="page" value="1"/>。
    比較兩個字段

    這是一個展示你怎樣才能比較兩個字段是否有一樣的值的例子。比如“用戶改變他們的口令“一般會有口令字段和一確認字段。

    <validator name="twofields"

    classname="com.mysite.StrutsValidator"

    method="validateTwoFields"

    msg="errors.twofields"/>

    <field property="password" depends="required,twofields">

    <arg0 key="typeForm.password.displayname"/>

    <var>

    <var-name>secondProperty</var-name>

    <var-value>password2</var-value>

    </var>

    </field>

     

    public static boolean validateTwoFields(

    Object bean, ValidatorAction va,  

    Field field, ActionErrors errors, HttpServletRequest request,  

    ServletContext application) {

    String value = ValidatorUtils.getValueAsString( bean,   field.getProperty());

    String sProperty2 = field.getVarValue("secondProperty");

    String value2 = ValidatorUtils.getValueAsString( bean,   sProperty2);

     

            if (!GenericValidator.isBlankOrNull(value)) {

    try {

    if (!value.equals(value2)) {

    errors.add(field.getKey(),

    Resources.getActionError( application, request, va, field));

                                 return false;

    }

    } catch (Exception e) {

    errors.add(field.getKey(), Resources.getActionError( application, request, va, field));

    return false;

    }

    }

    }
    已知的bug

    Struts Validator依賴于Commons Validator包,所以問題報告和增強需求可能在兩個產品中列出。

    ·    Struts Validator Bugzilla Reports

    ·    Commons Validator Bugzilla Reports
    變更和deprecations

    新建的標記屬性。

    <html:javascript>標記有新的屬性定義.

    使用commons-validator.jar中的DTD驗證。

    當前使用的驗證XML文件是根據commons-validator.jar中的DTD。Struts不在為validator-rules.xml and validator.xml.單獨維護一個分離的DTD,另外,commons-validator 現在維護一個統一的validator.dtd。修改所有validator.xml文件的DTD引用為

    <!DOCTYPE form-validation PUBLIC

    "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"

    "

    空字段。

    當前默認在所有得基礎驗證類型中忽略空白的字段,如果你要求一個字段必須輸入,那末在你的應用的validator.xml 文件相應的字段定義的depends屬性中添加 " required "。

    新建的范圍RANGE方法.

    JavaScript 和JAVA中都添加了intRange & floatRange 方法。

    有條件地REQUIRED字段.

    最大的修改是添加了基于其她字段的值的有條件地require驗證的能力。它允許你定義邏輯如:“只有X字段非空的時候Y字段為’male’才有效”,這是實現上述邏輯的推薦方法,這種方法在1.1版后的第一版將實現。在1.1版中添加的Requiredif驗證規則,將在新版中去掉。不過,如果你正準備使用requiredif,這里有一個簡短的教程。

            讓我們假定你有一個有3個字段的醫藥的信息表單,性別sex,懷孕測試pregnancyTest,測試結果testResult,如果性別為'f' or 'F',則懷孕測試pregnancyTest是required,如果pregnancyTest不是空,測試結果testResult是required。

    你的validation.xml 文件的輸入項應該是這樣的:

    <form name="medicalStatusForm">

    <field property="pregnancyTest" depends="requiredif">

    <arg0 key="medicalStatusForm.pregnancyTest.label"/>

    <var>

    <var-name>field[0]</var-name>

    <var-value>sex</var-value>

    </var>

    <var>

    <var-name>fieldTest[0]</var-name>

    <var-value>EQUAL</var-value>

    </var>

    <var>

    <var-name>fieldValue[0]</var-name>

    <var-value>F</var-value>

    </var>

    <var>

    <var-name>field[1]</var-name>

    <var-value>sex</var-value>

    </var>

    <var>

    <var-name>fieldTest[1]</var-name>

    <var-value>EQUAL</var-value>

    </var>

    <var>

    <var-name>fieldValue[1]</var-name>

    <var-value>f</var-value>

    </var>

    <var>

    <var-name>fieldJoin</var-name>

    <var-value>OR</var-value>

    </var>

    </field>

    <field property="testResult" depends="requiredif">

    <arg0 key="medicalStatusForm.testResult.label"/>

    <var>

    <var-name>field[0]</var-name>

    <var-value>pregnancyTest</var-value>

    </var>

    <var>

    <var-name>fieldTest[0]</var-name>

    <var-value>NOTNULL</var-value>

    </var>

    </field>

    </form>

     

    這里有一個使用索引的屬性更復雜的例子,如果你的struts-config.xml 有這下面:

    <form-bean name="dependentlistForm"

    type="org.apache.struts.webapp.validator.forms.ValidatorForm">

    <form-property

    name="dependents"

    type="org.apache.struts.webapp.validator.Dependent[]" size="10"/>

    <form-property name="insureDependents" type="java.lang.Boolean" initial="false"/>

    </form-bean>

    這里dependentlistForm bean有lastName,firstName,dob,coverageType四個屬性,你可以這樣定義一驗證規則:

    <form name="dependentlistForm">

    <field

    property="firstName" indexedListProperty="dependents" depends="requiredif">

    <arg0 key="dependentlistForm.firstName.label"/>

    <var>

    <var-name>field[0]</var-name>

    <var-value>lastName</var-value>

    </var>

    <var>

    <var-name>fieldIndexed[0]</var-name>

    <var-value>true</var-value>

    </var>

    <var>

    <var-name>fieldTest[0]</var-name>

    <var-value>NOTNULL</var-value>

    </var>

    </field>

     

    <field

    property="dob" indexedListProperty="dependents" depends="requiredif,date">

    <arg0 key="dependentlistForm.dob.label"/>

    <var>

    <var-name>field[0]</var-name>

    <var-value>lastName</var-value>

    </var>

    <var>

    <var-name>fieldIndexed[0]</var-name>

    <var-value>true</var-value>

    </var>

    <var>

    <var-name>fieldTest[0]</var-name>

    <var-value>NOTNULL</var-value>

    </var>

    </field>

     

    <field

    property="coverageType" indexedListProperty="dependents" depends="requiredif">

    <arg0 key="dependentlistForm.coverageType.label"/>

    <var>

    <var-name>field[0]</var-name>

    <var-value>lastName</var-value>

    </var>

    <var>

    <var-name>fieldIndexed[0]</var-name>

    <var-value>true</var-value>

    </var>

    <var>

    <var-name>fieldTest[0]</var-name>

    <var-value>NOTNULL</var-value>

    </var>

    <var>

    <var-name>field[1]</var-name>

    <var-value>insureDependents</var-value>

    </var>

    <var>

    <var-name>fieldTest[1]</var-name>

    <var-value>EQUAL</var-value>

    </var>

    <var>

    <var-name>fieldValue[1]</var-name>

    <var-value>true</var-value>

    </var>

    <var>

    <var-name>fieldJoin</var-name>

    <var-value>AND</var-value>

    </var>

    </field>

    </form>

    這里的意思是:

    如果lastName 字段是非空的,firstName 字段required。因為字段Indexed 為真,這它意味著lastName的indexed 必須與firstName 的索引的一樣,dob同理,除非date不為空。

    如果lastName 用樣索引時的值不空, 而且非索引字段insureDependents為真,則coverageType 是only require。

    你可以對字段在[n]中使用任意數字,唯一的限制是他們必須都是AND或OR,你無法混合使用。

    Deprecation:

    u        JavaScript 和Java的range方法.

    u        StrutsValidator &StrutsValidatorUtil 類中的Deprecation方法
    驗證器api指南

    一個簡明的Struts驗證器API指南 可以幫助你開始。
    驗證器資源

    Struts Validator: Validating Two Fields Match 作者Matt Raible。(兩個字段匹配驗證)關于使用方法的文章。(范例部分為翻譯此文內容)

    DynaForms and the Validator 作者James Turner and Kevin Bedell。Struts Kickstart的其中一章(動態form和驗證器),可以自由下載PDF).

    Validating user input 作者 David Winterfeldt and Ted Husted。Struts in Action的其中一章,可以自由下載(PDF)。

    posted @ 2009-01-07 09:52 Hill 閱讀(205) | 評論 (0)編輯 收藏
    CALENDER
    <2009年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜


    Powered By: 博客園
    模板提供滬江博客

    主站蜘蛛池模板: 无码专区AAAAAA免费视频| 免费无码av片在线观看| 日日摸夜夜添夜夜免费视频| 一级白嫩美女毛片免费| 成年女人A毛片免费视频| 无码国产精品一区二区免费3p | 久久国产乱子伦精品免费不卡 | 免费电视剧在线观看| 国产男女性潮高清免费网站| 2048亚洲精品国产| 亚洲AV无码久久精品成人| 亚洲国语在线视频手机在线| 亚洲人成网站色7799| 一级特黄a大片免费| 亚洲精品免费视频| 全免费一级毛片在线播放| 国产精品V亚洲精品V日韩精品| 国产亚洲精品国产| 久久亚洲精品专区蓝色区| 免费国产草莓视频在线观看黄| 中文字幕在线免费看线人| 桃子视频在线观看高清免费完整 | 114一级毛片免费| 免费国产精品视频| 亚洲AV色香蕉一区二区| 7777久久亚洲中文字幕| 丰满少妇作爱视频免费观看| **aaaaa毛片免费同男同女| 国产精品无码一二区免费| 久久国产精品亚洲一区二区| 亚洲女子高潮不断爆白浆| 免费久久人人爽人人爽av | 一区二区三区观看免费中文视频在线播放 | 亚洲精品视频免费| 亚洲综合色丁香麻豆| 国产亚洲精品2021自在线| 日韩午夜理论免费TV影院| 国产真人无遮挡作爱免费视频| 久久精品国产亚洲AV香蕉| 深夜福利在线免费观看| 97热久久免费频精品99|