當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

          #

          類代碼:
          /*************************
          *
          *   Class:CheckItem
          *   2009.08.23
          **************************/
          //-- Contructor
          function CheckItem(textboxName,msg,validChar,isRequired){
              this.textboxName=textboxName;
              this.msg=msg;
              this.validChar=validChar;
              this.isRequired=isRequired;
          }

          /*************************
          *
          *   Class:FormChecker
          *   2009.08.23
          **************************/
          //-- Contructor
          function FormChecker(){
              this.checkItemArray=new Array;
          }

          //-- Add a check Item to array
          FormChecker.prototype.addCheckItem=function(textboxName,msg,validChar,isRequired){
              var checkItem=new CheckItem(textboxName,msg,validChar,isRequired);
              this.checkItemArray[this.checkItemArray.length]=checkItem;
          }

          //-- Check text field in the form 
          FormChecker.prototype.checkTextBox=function(checkItem){
              var validChar=checkItem.validChar;
              var isRequired=checkItem.isRequired;
              var inputValue=$(checkItem.textboxName).value;
              
              if(isRequired!="true" && inputValue.length
          <1){
                  return true;
              }
              else{
                  var regexStr
          ="^"+validChar+"$";
                  var regex
          =new RegExp(regexStr);
                  return regex.test(inputValue);
              }
          }

          //-- judge the validation of a form
          FormChecker.prototype.isValid
          =function(){
              
          for(var i=0;i<this.checkItemArray.length;i++){
                  
          var    toBeCheckedObj=this.checkItemArray[i];
                  
                  
          var checkResult=this.checkTextBox(toBeCheckedObj);
                  
                  
          if(checkResult==true){
                      
          continue;
                  }
                  else{        
                      alert(toBeCheckedObj.msg);
                      $(toBeCheckedObj.textboxName).focus();
                      
                      return false;
                  }                
              }

              return true;
          }


          頁面代碼:
          /*****************************************************
          * 窗口載入時調用的啟動函數
          *****************************************************/
          var formChecker;
          window.onload=function(){
              // 設置主菜單的當前菜單項
              setMainmenuCurrentItem(0);
              
              // 設置側邊菜單的當前菜單項
              setSidemenuCurrentItemByText("合同起草");
              
              // 取得合同類別的數據
              // 填充下拉列表框數據
              new TypeListbox("contractTypeFirst","0","contractTypeSecond","");
              new TypeListbox("contractTypeSecond",$("contractTypeFirst").value,"contractTypeThird","");
              
              // var today=getToday();
              // $("createTime").value=today; // 屏蔽了合同起草時間,故這里也屏蔽。何楊,2011年5月6日9:20:34
              // $("maintenanceEndTime").value=today;
              
              // 初始化檢查項
              formChecker=new FormChecker();
              formChecker.addCheckItem("contractName","請輸入一到一百位的合同名",".{1,100}","true");
              formChecker.addCheckItem("contractTypeThird","請點擊下拉列表框依次選擇合同類別",".{1,100}","true");
              formChecker.addCheckItem("contractAmount","請輸入數字形式的合同總金額(金額限制百億內)","([0-9]{1})(\\d{0,9})","true");
              formChecker.addCheckItem("vendorName","請點擊右邊圖標選擇合同對方名稱。",".{1,}","true");
              formChecker.addCheckItem("fulfillCycle","請輸入數字形式的合同履行期限,以月為單位(最多十位數字)","([1-9]{1})(\\d{0,9})","true");
              formChecker.addCheckItem("maintenanceStartTime","請點擊右邊的按鈕選擇模板選擇維保起始日期","(\\d{4})-(\\d{1,2})-(\\d{1,2})","false");
              formChecker.addCheckItem("maintenanceEndTime","請點擊右邊的按鈕選擇模板選擇維保結束日期","(\\d{4})-(\\d{1,2})-(\\d{1,2})","false");
              
              formChecker.addCheckItem("contractBriefFile","請輸入零到五百字的合同所屬項目概況或依據的文件",".{1,500}","false");
              formChecker.addCheckItem("contractDecision","請輸入零到一千字的項目決策過程",".{1,1000}","false");
              formChecker.addCheckItem("remark","請輸入零到兩百五十個字的補充說明",".{1,250}","false");
              formChecker.addCheckItem("maintenanceDescription","請輸入零到一千個字的維保描述",".{1,1000}","false");
          }

          /*********************************************************************
          *  得到表單的檢查結果
          *  何楊,2011-4-17 14:31:40
          *********************************************************************/
          function getCheckResult(){
              // 進行頁面輸入檢查
              if(formChecker.isValid()==false){
                  return false;
              }
              
              // 維保起始日期
              var maintenanceStartTime=$("maintenanceStartTime").value;
              
              // 維保結束日期
              var maintenanceEndTime=$("maintenanceEndTime").value;
              
              // 維保起始日期和維保結束日期做比較
              if(isNotEmptyString(maintenanceStartTime)==true && isNotEmptyString(maintenanceEndTime)==true){
                  if(isReasonable(maintenanceStartTime,maintenanceEndTime)==false){
                      alert("維保結束日期必須晚于維保起始日期.");
                      $("maintenanceEndTime").focus();
                      return false;
                  }
              }
              
              return true;
          }
          posted @ 2011-05-23 08:58 何楊 閱讀(238) | 評論 (0)編輯 收藏



          js類代碼:
          /*************************************
          *
          *   Class:ContractTypeListboxOne
          *   2011-5-18 20:08:00
          **************************************/
          //-- 構造函數
          function TypeListbox(id,parentId,nextId,nextParentId){
              this.id=id;
              this.parentId=parentId;
              this.nextId=nextId;
              this.nextParentId=nextParentId;
              
              this.init();
              this.fillData($(this.id),parentId);
          }

          //-- 初始化
          TypeListbox.prototype.init=function(){
              var ctrl=$(this.id);
              var me=this;
                  
              ctrl.onchange=function(){
                  me.changeEvent();
              }    
          }

          //-- 變化事件
          TypeListbox.prototype.changeEvent=function(){
              var ctrl=$(this.id);
              
              if(this.nextId.length>0 && this.nextId!="none"){
                  this.fillData($(this.nextId),ctrl.value);
              }
          }

          //-- 填充數據
          TypeListbox.prototype.fillData=function(myListbox,parentId){
              /*if(parentId.length
          <|| parentId=="none"){
                  
          return;
              }*/

              var url
          =encodeURI('GetContractType.do?parentId='+parentId);
              
          url=encodeURI(url);
              
              
          new Ajax.Request(url,{     
                     method:'get',     
                     onSuccess: function(ajaxObj){    
                            // alert(ajaxObj.responseText);  
                          var status
          =ajaxObj.responseXML.getElementsByTagName("status")[0].firstChild.data;
                                          
                          
          if(status=="ok"){
                              
          // 返回正確信息

                              // 找到所有節點放入數組,為避免麻煩,節點名統一都設置成node比較好,不用實例變了,這里就要改變一次。
                              var arr
          =ajaxObj.responseXML.getElementsByTagName("node");
                              
          var length=arr.length;

                              
          for(var i=myListbox.options.length-1;i>=0;i--){
                                  myListbox.remove(i);
                              }
                              
                              var newOption=new Option;
                              newOption.value="";
                              newOption.text="--請選擇--";
                              myListbox.add(newOption);

                              if(length>0){
                                  // 遍歷這個數組
                                  for(var i=0;i
          <length;i++){
                                      var node
          =arr[i];
                                                          
                                      
          var id=node.getElementsByTagName("id")[0].firstChild.data;
                                      
          var name=node.getElementsByTagName("name")[0].firstChild.data;
                                      
                                      
          var newOption=new Option;
                                      newOption.value
          =id;
                                      
          newOption.text=name;
                                      
          myListbox.add(newOption);
                                  }
                              }
                              
                              myListbox.selectedIndex
          =0;
                              
          myListbox.fireEvent("onchange");
                          }
                          else{
                              // 返回錯誤信息
                              var text
          =ajaxObj.responseXML.getElementsByTagName("text")[0].firstChild.data;
                              
          alert(text);
                          }
                     },     
                     onFailure: function(){ 
                         alert("無法取得服務器的響應");
                     }   
                  }
                ); 
          }


          頁面下拉列表框:

          <tr>

          <td width="100%" colspan="10">

          <div class="inputText">

          <label for="classOneCbo">合同類別:</label>

          <select id="classOneCbo">

          <option value="" selected>--請選擇--</option>

          </select>

          <font color="#003366">-</font>

          <select id="classTwoCbo">

          <option value="" selected>--請選擇--</option>

          </select>

          <font color="#003366">-</font>

          <select id="classThreeCbo">

          <option value="" selected>--請選擇--</option>

          </select>

          </div>

          </td>

          </tr>


          頁面JS初始化代碼:

          /*****************************************************

          * 窗口載入時調用的啟動函數

          * 何楊,2011年4月22日16:59:16

          *****************************************************/

          window.onload=function(){

          // 設置主菜單的當前菜單項

          setMainmenuCurrentItem(0);

          // 設置側邊菜單的當前菜單項

          setSidemenuCurrentItemByText("待辦事項");

          // 填充下拉列表框數據

          new TypeListbox("classOneCbo","0","classTwoCbo","");

          new TypeListbox("classTwoCbo",$("classOneCbo").value,"classThreeCbo","");

          // 開始檢索初始數據

          search(0);

          }




          posted @ 2011-05-19 14:50 何楊 閱讀(642) | 評論 (1)編輯 收藏

          <html>
              
          <head>
                  
          <title>test</title>
              
          </head>
              
          <body>
                  
          <select id="mySelect">
                      
          <option value="1">地球</option>
                      
          <option value="2">火星</option>
                      
          <option value="3">木衛二</option>
                      
          <option value="4">冥王星</option>
                      
          <option value="5">參宿四</option>
                      
          <option value="6">人馬座</option>
                  
          </select>
              
          </body>
          </html>

          <script language="javascript">
          <!--
          window.onload
          =function(){
              
          var listBox=new ListBox("mySelect");
              
          }


          function $(id){
              
          return document.getElementById(id);
          }


          //-- 類構造函數
          function ListBox(id){
              
          this.id=id;
              
          this.init();    
          }

          //--類的初始化函數,將控件的onchange事件交給類的changeEvent事件處理
          ListBox.prototype.init=function(){
              
          var ctrl=$(this.id);
              
          var me=this;
                  
              ctrl.onchange
          =function(){
                  me.changeEvent();
              }

              
          }

          // onchange事件產生時彈出下拉列表控件的值
          ListBox.prototype.changeEvent=function(){
              
          var ctrl=$(this.id);
              alert(ctrl.value);
          }

          //-->
          </script>
          posted @ 2011-05-19 08:15 何楊 閱讀(215) | 評論 (0)編輯 收藏

          一般來說,出現這種異常是因為傳遞給遠程方法的參數不能實例化所致,比如有一個參數是復合類型,里面包括Calendar,Date,BigDecimal等形式的數據,需要把這些非基本類型的數據new出來賦值,然后再調用就好辦了?;绢愋秃蚐tring等數據則不用理會。



          posted @ 2011-04-09 21:16 何楊 閱讀(7775) | 評論 (0)編輯 收藏

          Table.stock tr{
              onmouseover 
          : expression(onmouseover=function (){this.style.backgroundColor ='#b3ddfb'}); 
              onmouseout  : expression(onmouseout=function () 
          {this.style.backgroundColor =''});
          }
          posted @ 2011-03-30 19:51 何楊 閱讀(375) | 評論 (0)編輯 收藏

          一.以目錄形式打開某個較深不易記憶的目錄。
          explorer  path
          例子:explorer C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01\logs\server1

          二.控制臺方式進入某個目錄。
          在此目錄下建一個bat文件,里面只寫cmd三個字。然后創建快捷方式到桌面就可以了。

          posted @ 2011-03-16 23:38 何楊 閱讀(224) | 評論 (0)編輯 收藏

          將程序從一個容器換到另一個容器,總會有各種意料之外的困難需要解決,近日本人需要將一個Web工程從Tomcat環境轉移到WebSphere環境,經歷了一番周折,特地將此經過記錄下來,也許它能對將要進行如此經歷的人其一點幫助作用,另外在此也向網絡同仁和工作中的同事表示感謝。

          原環境:
          程序:SSH
          容器:Tomcat6.0
          數據庫:MySql5

          新環境:
          程序:SSH
          容器:WebSphere6.1
          數據庫:Oracle10g

          移植過程中的第一個困難,是WebSphere不認識Web.xml中的Struts taglib.原文字(適用于Tomcat)如下:
          <!-- Struts的TLDS -->
              
          <taglib>
                  
          <taglib-uri>/WEB-INF/tld/app.tld</taglib-uri>
                  
          <taglib-location>/WEB-INF/tld/app.tld</taglib-location>
              
          </taglib>

              
          <!-- Struts Tag Library Descriptors -->
              
          <taglib>
                  
          <taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
                  
          <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
              
          </taglib>

              
          <taglib>
                  
          <taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
                  
          <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
              
          </taglib>

              
          <taglib>
                  
          <taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
                  
          <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
              
          </taglib>

          這個問題因為之前有所準備,在網絡上找到了答案,將上述文字包在<jsp-config>節點中即可,修改后(對Tomcat和WebSphere均適用)的文字如下:
          <!-- Struts的TLDS -->
              
          <jsp-config>
                  
          <taglib>
                      
          <taglib-uri>/WEB-INF/tld/app.tld</taglib-uri>
                      
          <taglib-location>/WEB-INF/tld/app.tld</taglib-location>
                  
          </taglib>

                  
          <!-- Struts Tag Library Descriptors -->
                  
          <taglib>
                      
          <taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
                      
          <taglib-location>
                          /WEB-INF/tld/struts-bean.tld
                      
          </taglib-location>
                  
          </taglib>

                  
          <taglib>
                      
          <taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
                      
          <taglib-location>
                          /WEB-INF/tld/struts-html.tld
                      
          </taglib-location>
                  
          </taglib>

                  
          <taglib>
                      
          <taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
                      
          <taglib-location>
                          /WEB-INF/tld/struts-logic.tld
                      
          </taglib-location>
                  
          </taglib>
              
          </jsp-config>

          如此處理后,首頁顯示出來了,隨即翻頁遇到了問題,在IE中是翻頁出現404錯誤,在FF中好一點,它告訴我WebSphere無法解析struts配置文件struts-config.xml。
          起初我以為是中文問題,刪除struts-config.xml中所有中文注釋問題依舊,接下來在網絡中尋找,還真有和我遇到一樣問題的難友,但沒人提出解決方案,正在撓頭之際,我們的PM忽然說是否JDK不一致,檢查一下,本機用的是1.6,而WebSphere自帶1.5的,將本機也調成1.5后,問題解決! 真是只有咒語能解開咒語。

          再下來,在表單提交時遇到了亂碼問題,這是因為之前聽信網絡意見,將Web.xml中的filter都去掉了,結果自然亂碼。此時感覺網絡傳聞未必可信,于是將filter又重新加上,亂碼沒有了??磥聿唤浻H自嘗試而盲從網絡傳聞是要吃虧的。

          再下來,程序要訪問數據庫了,于是在WebSphere6.1中設置了數據源,再在Spring配置文件中進行了設置,如下:
          <bean id="dataSource"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName"
                      value
          ="java:comp/env/jdbc/*******DS">
                  
          </property>
          </bean> 


          這樣寫在Tomcat中好用,在WebSphere不好用,正在撓頭之際,PM告我別的項目有同樣的寫法,于是一看,java:comp/env/這部分是不需要的,直接把數據源JNDI名寫在Value中就可以了。
          <bean id="dataSource"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName"
                      value
          ="jdbc/*******DS">
                  
          </property>
          </bean> 

          其它數據庫移植的問題就交給了Hibernate。至此問題全部解決。

          事后來看,WebSphere6.1對中文,SSH的支持還是很好的,只是有些特定的地方和傳統的Tomcat中的項目不太一樣,注意一下就好了,未必有想象中的困難。遇到困難時,向有同樣經歷的人請教比自己在網絡上搜尋要快很多。
          posted @ 2011-03-16 22:43 何楊 閱讀(421) | 評論 (2)編輯 收藏

          下載地址:
          http://www.aygfsteel.com/Files/heyang/RSAWebServiceSample.zip

          posted @ 2011-03-16 00:30 何楊 閱讀(246) | 評論 (0)編輯 收藏

               摘要:   第一部分:頁面中JavaScript的寫法:   function isSoleContractName(contractNameTextBox){                 var&nb...  閱讀全文
          posted @ 2011-03-14 11:35 何楊 閱讀(373) | 評論 (0)編輯 收藏

          第一部分:Web.Xml中ContextLoaderListener的相關配置
          在工程目錄下的\WebContent\WEB-INF\web.xml中,我們可以發現以下配置:

          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/applicationContext-*.xml</param-value>
          </context-param>

           

          <listener>
          <listener-class>
          org.springframework.web.context.ContextLoaderListener
          </listener-class>
          </listener>

          以上第一段XML中,contextConfigLocation參數定義了要載入Spring上下文的配置文件,這里采用了通配符的方式,也可以通過逗號符來分隔多個文件。
          以上第二段XML定義了一個監聽器,它適用于Servlet2.3及其以上版本,這個監聽器會隨著WebApp的啟動而啟動,并加載contextConfigLocation參數中定義好的Spring配置文件。若是在Servlet2.3以下版本中,則需要定義org.springframework.web.context.ContextLoaderServlet來載入配置文件。

          第二部分:Action Bean的配置
          接下來我們需要將Struts2的Action交給Spring管理,以com.heyang.module.contract.action. CheckSoleContractNameAction類為例,它在Spring配置文件\WebContent\WEB-INF\applicationContext-action.xml中的相應配置為:

          <bean id="checkSoleContractNameAction"   class="com.heyang.module.contract.action.CheckSoleContractNameAction" singleton="false">
                  
          <property name="contractService">
                      
          <ref bean="contractService"/>
                  
          </property>
          </bean>

          由上面的XML知道,如果我們取得名為checkSoleContractNameAction的bean,Spring將通過反射調用一個com.heyang.module.contract.action.CheckSoleContractNameAction類的實例,并將一個名為contractService的bean注入進去,當然CheckSoleContractNameAction需要擁有此屬性并具備對應的setter/getter。

          第三部分:在Struts配置文件中將url映射到Spring上下文中的bean
          這種方式是通過指定<action>的class屬性為Spring配置文件中相應bean的id值來做到的,再以CheckSoleContractNameAction為例,它在Struts2配置文件WebContent\WEB-INF\struts-cfg\contract\struts.xml中的相應設置為:
          <action name="checkSoleContractName" class="checkSoleContractNameAction" method="execute"/>
          這樣,當頁面中url有對應用上下文/contract/checkSoleContractName.action?...
          時,com.heyang.module.contract.action.CheckSoleContractNameAction類的execute方法將會來處理用戶的請求。注意,這段url中,應用上下文是WebApp Context,contract是action所在包的名稱空間,checkSoleContractName則是action的name。

          至此,Struts2和Spring的整合配置講述完畢。

          第四部分:Struts2與Spring的整合原理
          在\WebContent\WEB-INF\lib\下存在一個struts2-spring-plugin-2.0.9.jar,這個插件包的作用是通過覆蓋(override)Struts2的ObjectFactory來增強核心框架對象的創建。當Struts2需要根據配置文件創建一個Action的時候,它會用Struts2配置文件中的class屬性去和Spring配置文件中的id屬性進行關聯,如果能找到,則由Spring創建;否則由Struts 2框架自身創建。這個功能是通過插件提供的兩個攔截器實現的,默認情況下框架使用的自動裝配策略是name,也就是說框架會去Spring中尋找與Action屬性名字相同的bean,可選的裝配策略還有:type、auto、constructor等。

          第五部分:Spring與Hibernate的整合
          通常來說,每個負責具體請求的Action都會被注入一個或多個Service bean(參見applicationContext-action.xml),而每個Service Bean都會被注入一個DAO bean(參見applicationContext-dao.xml),而每個dao bean都被被注入一個hibernateTemplate來與數據庫交互(參見applicationContext-dao.xml),而在applicationContext-db.xml中,說明了hibernateTemplate的由來,它最終會找到一個datasource從而找到數據庫。

          這樣,從前臺Struts2的控制器到后臺數據庫,S2SH整個鏈條就被串起來了。

          posted @ 2011-03-13 23:41 何楊 閱讀(614) | 評論 (0)編輯 收藏

          僅列出標題
          共28頁: First 上一頁 10 11 12 13 14 15 16 17 18 下一頁 Last 
          主站蜘蛛池模板: 阿克| 金华市| 塘沽区| 徐汇区| 湖北省| 法库县| 吉木乃县| 仁寿县| 两当县| 砀山县| 汕头市| 富川| 正蓝旗| 昌乐县| 万州区| 八宿县| 陕西省| 梁平县| 怀化市| 淮滨县| 平湖市| 台东市| 和田市| 哈密市| 遂宁市| 罗定市| 滨海县| 湟源县| 宜兴市| 阆中市| 九龙城区| 大厂| 桐乡市| 揭西县| 锡林郭勒盟| 镇雄县| 潞城市| 开化县| 诏安县| 荣成市| 固镇县|