2007年1月14日

          在IBM的JDK環境下進行JVM內存監控的問題

          錯誤信息如下:
          java.lang.NoClassDefFoundError: sun.management.ManagementFactory

          處理:

          sun.management.ManagementFactory替換成java.lang.management.ManagementFactory  

          因為ibmjdk沒有sun.management.ManagementFactory這個對象

          posted @ 2010-11-25 12:01 JGAO編程隨筆 閱讀(565) | 評論 (0)編輯 收藏

          oracel PreparedStatement的setString問題

          錯誤信息如下:

          超過最大長度限制

          處理:

          只能插入666個中文字符。


          或者更新到最新的
          oracle驅動包

          posted @ 2010-11-25 12:00 JGAO編程隨筆 閱讀(270) | 評論 (0)編輯 收藏

          servicemix部署到websphere中,需注意的問題

          1derby.jar包可能沖突,需刪除項目中的該包

          2MBean調用問題

             Websphere的MBean注冊路徑包括cell,nodeName和processName,具體可以銅鼓jconsole連接來查看MBean注冊的全路徑。這三個值可以通過Websphere的com.ibm.websphere.management.AdminServiceFactory這個對象來獲取,spring中的配置如下:
          <!-- 用于獲取websphereMBean名稱的cell,node,process -->

          <bean id="adminService" class="com.ibm.websphere.management.AdminServiceFactory" factory-method="getAdminService"/>

          <bean id="adminService.cellName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>

          <bean id="adminService.nodeName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>

          <bean id="adminService.processName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>

          <bean id="websphereNamingStrategy" class="com.des.engine.mbean.WebsphereNamingStrategy">

          <property name="cellName" ref="adminService.cellName"/>

          <property name="nodeName" ref="adminService.nodeName"/>

          <property name="processName" ref="adminService.processName"/>

          </bean>

          WebsphereNamingStrategy為自己創建的對象就包括那三個屬性

          3:安全問題

          出現如下錯誤,Caused by: javax.management.JMRuntimeException: ADMN0022E: 由于憑證不足或憑證為空,無法對 org.apache.servicemix:Name=ServiceMgtImpl,cell=dvpbNode02Cell,Type=SystemService,ContainerName=ServiceMix,node=dvpbNode02,process=server1 MBean  retrieveServiceList 操作進行訪問。

              該問題是因為設置了安全控制,把控制臺的【安全性->安全管理、應用程序和基礎結構】里面的所以安全配置都去掉,然后重新啟動服務器主機(注意是重啟主機,不然安全設置不起作用),再啟動websphere服務應該就可以了,還有就是servicemix的應用要跟websphere一起啟動,不要等websphere啟動后再到控制臺啟動

          posted @ 2010-11-25 11:58 JGAO編程隨筆 閱讀(892) | 評論 (2)編輯 收藏

          ResultSet內存溢出OutOfMemory問題

          錯誤信息如下:

          jdbc在操作oracle海量數據的時候用ResultSet獲取所有的返回數據出現內存溢出

          處理:
          出錯的原因是ResultSet用的是可滾動結果集,正常情況下ResultSet是指針指向數據庫的數據,本身是不存儲數據庫的數據的,默認情況下就算是提交的sql能查詢處上億條的數據也是不消耗內存的,但是如果用的是可滾動結果集的ResultSet情況就不一樣了,ORACLE 是不支持可滾動結果集的,那么我們用JDBC得到一個可滾動的結果集就是由JDBC自己支持的,也就是說結果集是要存放在內存中的,所以在海量數據的情況下也就是要消耗大量內存的,因此造成內存溢出也就是正常的了,所以如果是海量數據的話就不要用可滾動結果集就可以了。

          posted @ 2009-06-23 21:19 JGAO編程隨筆 閱讀(2113) | 評論 (0)編輯 收藏

          com.ibm.websphere.ce.cm.StaleConnectionException: [ibm][db2][jcc][t4][2030][11211] 檢測到了通信錯誤

          錯誤信息如下:

          com.ibm.websphere.ce.cm.StaleConnectionException: [ibm][db2][jcc][t4][2030][11211]

          檢測到了通信錯誤。所使用的通信協議:TCP/IP"n所使用的通信 APISOCKETS

          檢測到錯誤的位置:Reply.fill()"n用于檢測錯誤的通信功能:InputStream.read()

          特定于協議的錯誤代碼數據不足、 0。消息:null"n   

          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)"n     

          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)"n    at

          sun.reflect.DelegatingConstructorAccessorImpl.newInstance

          (DelegatingConstructorAccessorImpl.java:45)"n

          at java.lang.reflect.Constructor.newInstance(Constructor.java:522)"n  

          at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapExceptionHelper

          (GenericDataStoreHelper.java:523)"n   

          at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapException(GenericDataStoreHelper.java:578)"n      

          at com.ibm.ws.rsadapter.jdbc.WSJdbcUtil.mapException(WSJdbcUtil.java:909)"n 

          at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeQuery(WSJdbcStatement.java:898)"n   

          at com.newland.bi.util.db.DBUtil.executeQuery(Unknown Source)"n

          at com.newland.bi.util.db.DBUtil.executeSql(Unknown Source)"n     

          at com.newland.bi.dao.jdbc.DaoImpl.executeQuery(DaoImpl.java:64)"n   

          at com.newland.bi.service.report.exp.dao.ReportExpDao.getExpList(ReportExpDao.java:72)"n 

          at com.newland.bi.service.report.exp.manage.ReportExpMgt.runExport(ReportExpMgt.java:91)"n   

          at com.newland.bi.service.report.exp.servlet.ReportExp1Servlet$1.run(ReportExp1Servlet.java:97)"n      

          at java.util.TimerThread.mainLoop(Timer.java:537)"n       at java.util.TimerThread.run(Timer.java:487)"n

          處理:

          出錯的原因可能是防火墻問題,websphere應用服務器和數據庫服務器之間是否存在防火墻

          防火墻是否會設置多久沒活動的連接就自動斷開掉,如果是這樣的話就會有問題,因為websphere上面的數據庫連接池可能有一段時間沒連接而被防火墻斷掉了

          但對于連接池本身根本就不知道該連接是否還可用,所以web應用從連接池獲取的連接可能就是已經斷開的了,所以就可能會出現日記中的錯誤問題


           

          posted @ 2009-06-23 21:14 JGAO編程隨筆 閱讀(7427) | 評論 (1)編輯 收藏

          Timer.schedule和Timer.scheduleAtFixedRate的區別

          schedulescheduleAtFixedRate的區別在于,如果指定開始執行的時間在當前系統運行時間之前,scheduleAtFixedRate會把已經過去的時間也作為周期執行,而schedule不會把過去的時間算上。

          posted @ 2009-06-23 21:13 JGAO編程隨筆 閱讀(1003) | 評論 (0)編輯 收藏

          cxf找不到類org.apache.axis.soap.MessageFactoryImpl出錯

           

          錯誤信息如下:

          Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl

              at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

              at java.security.AccessController.doPrivileged(Native Method)

              at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

              at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

              at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)

              at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

              at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:50)

              ... 10 more

          處理:

          原因是調用了axis soap.MessageFactoryImpl,cxf應該用的是sun
               在注冊安全攔截器之前執行下面代碼就可以了

          System.setProperty("javax.xml.soap.MessageFactory", "com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");

          posted @ 2009-06-23 21:10 JGAO編程隨筆 閱讀(1281) | 評論 (0)編輯 收藏

          瀏覽器下載txt文件問題

          我們寫程序的時候可能會想用open或者<a>來下載一個txt文件,但我們會發現我們用瀏覽器下載這個txt文件的時候老是在瀏覽器里面直接打開了,而不是提示下載,這樣的話如果txt文件的內容非常多的話肯定是不行的,可能就會導致瀏覽器掛掉,客戶機器死機的問題
          現整理了個解決辦法,代碼如下:

          1.下載頁面
          open(action執行頁面,'iframeName','');
          2.action執行頁面
          <id="tempB" style="display:none" href="#" onclick="">&nbsp;</a>
          <iframe width=0 height=0 id="hideIframe" name="hideIframe"></iframe>
          <script>
              
          var n=0;
              
          function go(url){
                  
                  n
          ==0?new function()
                  
          {
                      frames(
          "hideIframe").location=url,n=1
                  }
          :null;
                  
                  document.all(
          "hideIframe").readyState!="complete"?setTimeout(go,10):so();
                  
                  
          function so()
                  
          {
                      frames(
          "hideIframe").document.execCommand("SaveAs"),n=0
                  }
          ;
              }

              
              
          var tempB = document.getElementById("tempB");
              
          <%
                  
          if(path.toLowerCase().indexOf(".txt")>=0){
              
          %>
              tempB.attachEvent('onclick',
          function(){go('<%=request.getContextPath()+"/tempfile/1.txt">');});
              
          <%
                  }
          else{
              
          %>
              tempB.attachEvent('onclick',
          function(){open('<%=request.getContextPath()+"/tempfile/1.xls">','','');});
              
          <%
                  }

              
          %>
              tempB.click();
          </script>


          posted @ 2008-11-23 19:28 JGAO編程隨筆 閱讀(758) | 評論 (0)編輯 收藏

          websphere部署war應用失敗

          websphere部署war應用失敗正常原因是web.xml的節點定義循序問題,或者一些空格,字符原因造成的
          可能先定義完所有的servlet后再定義所有的servlet mapping就沒問題了

          posted @ 2008-08-23 15:27 JGAO編程隨筆 閱讀(641) | 評論 (0)編輯 收藏

          通過jsf事件轉向后的頁面中文亂碼

          那個轉向后的頁面已經有用gb2312的編碼了
          可能原因是在java類里面調用了((HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()).getWriter().write("");
          然后再轉向某個頁面,這樣可能導致編碼格式沖突,導致亂碼
          可以先給resonse設置下編碼格式,然后在write
          HttpServletResponse httpServletResponse = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
          httpServletResponse.setContentType("text/html; charset=gb2312");
          httpServletResponse.setCharacterEncoding("gb2312");
          httpServletResponse.getWriter().write("");
          這樣應該就可以解決了

          posted @ 2008-06-26 23:46 JGAO編程隨筆 閱讀(594) | 評論 (0)編輯 收藏

          websphere的servlet配置無效問題

          C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\app-bi2Node01Cell\applications\appname.ear\deployments\appname\appname.war\WEB-INF\web.xml 該目錄下的web.xml的修改才是有效

          應用程序發布的目錄下的那個web.xml添加的servlet配置是無效的

          posted @ 2008-04-28 18:06 JGAO編程隨筆 閱讀(1491) | 評論 (3)編輯 收藏

          jsp的request.getParameter獲取不到表單參數

          可能原因:

          1: form表單中的控件沒有定義name屬性

          2: form表單中的控件被設置成disabled

          3: form表單的enctype="multipart/form-data"是一種用于上傳文件的表單

          解決方法:

          對于第三種情況我們直接request.getParameter來取參數值是取不到的

          我們可以借用apache的上傳組件來解決

          用到jarcommons-fileupload-1.1.1.jar

          import org.apache.commons.fileupload.FileItem;

          import org.apache.commons.fileupload.FileItemFactory;

          import org.apache.commons.fileupload.FileUploadException;

          import org.apache.commons.fileupload.disk.DiskFileItemFactory;

          import org.apache.commons.fileupload.servlet.ServletFileUpload;

              /**

               *獲取各種類型表單的表單參數

               *@paramrequest HttpServletRequest請求對像

               * @paramparamName 參數名

               *@return

               *@throwsFileUploadException

               */

              publicstatic String getParameterValue(HttpServletRequest request,String paramName) throws FileUploadException{

              boolean isMultipart = ServletFileUpload.isMultipartContent(request);

              if(isMultipart==true){

                  FileItemFactory factory = new DiskFileItemFactory();

                  ServletFileUpload upload = new ServletFileUpload(factory);

                  List fileItemList = upload.parseRequest(request);

                  if(fileItemList!=null){

                     for(Iterator itr=fileItemList.iterator();itr.hasNext();){

                         FileItem fileItem = (FileItem)itr.next();

                         if(fileItem.getFieldName().equalsIgnoreCase(paramName)){

                             return new String(fileItem.getString().getBytes("ISO8859-1"))//中文轉碼

                         }

                     }

                  }

              }else{

                  return new String(request.getParameter(paramName).getBytes("ISO8859-1"))//中文轉碼

              }

              return"";

              }

          posted @ 2007-12-14 19:07 JGAO編程隨筆 閱讀(14905) | 評論 (6)編輯 收藏

          初學jsf自定義標簽時遇到的問題總結

          1.定義一個標簽要用到兩個java類,這個跟jsp的自定義標簽有點不一樣
            第一個類繼承UIComponentTag, 用于定義標簽的屬性和設置標簽的所有屬性值到控件的map屬性attributes或valueBinding中
            第二個類繼承UIInput或者UIOutput,用于渲染標簽的內容,真正打印標簽內容的地方就在這里
             
          2.這兩個類是怎么聯系的
           我們需要像定義jsf的bean的影射文件一樣,在faces-config.xml或者自己定義的xml文件里面定義第二個類
           如:
           
          <faces-config>
            
          <!--分頁標簽-->
            
          <component>
              
          <component-type>pageTag</component-type>
              
          <component-class>com.jsf.PageComponent</component-class>
            
          </component>
            
            
          </faces-config>
            然后第一個類要實現父類的一個方法 public String getComponentType();從這里返回一個字符串pageTag,這樣就跟第二個類聯系起來了

          3.標簽屬性的定義
            標簽屬性的定義一般都是可轉化為字符串的類型的,除非你還是用
          <%=rowList%>這種jsp賦值的方式
            別以為你定義的一個List類型的屬性可以用jsf的EL表達式可以直接賦值進來,EL表達式傳進來以后屬性接收的就是這一串EL表達式
            所以就是說你的屬性就是要字符串類型的

          4.那么jsf自定義標簽是怎么接收EL表達式綁定的列表的
           先通過父類的isValueReference(屬性值),來判斷該屬性的值是否是一個EL的表達式
           如果是則通過獲取綁定值得方式把真正的屬性的值設置到標簽父類的valueBinding對像中
           否則直接把屬性的值添加到標簽父類的attributes對像中
            if (isValueReference(屬性值)) {
              javax.faces.el.ValueBinding vb = Util.getValueBinding(value.toString());
              component.setValueBinding(name, vb); //component就是標簽對像,name就是標簽的屬性名稱
           } else {
              component.getAttributes().put(name, 屬性值);
           }

           這就是個設置屬性值的過程,可以在第1點說的第一個類里面的protected void setProperties(UIComponent component)方法
          5.現在知道標簽屬性值的作用了嗎
           是的標簽屬性值只不過是起個作用而已,而不是我們真正所要的值
           也就是說我們是不能從這些屬性中直接取值的
           
          6.那么我們怎么取屬性的真正的值呢
           可以先從第4點說的標簽父類的attributes對像中取值
           如果取不到值那就到標簽父類的valueBinding對像中取值
           說白了就是,通過第4步我們屬性的真正的值不是放在attributes就是在valueBinding中
           Object obj = component.getAttributes().get(name); //component就是標簽對像,name就是標簽的屬性名稱
           if (obj == null) {
             ValueBinding vb = component.getValueBinding(name);
             if (vb != null) {
              return vb.getValue(context);
             } else {
              return null;
             }
           }
           這個過程就是取屬性值的過程,在第1點說的第二個類里面進行
           
          7.現在屬性值也可以取到了,那么我們要怎么打印標簽的內容呢
            我們可以在第二個類的encodeBegin或者encodeEnd中進行
            public void encodeBegin(FacesContext context) throws IOException
            public void encodeEnd(FacesContext context) throws IOException
           
            取屬性值的過程也可以在這里進行,取完值后就是把值組裝到標簽內容的相應位置中就完了
            
            基本上就是這幾點

          posted @ 2007-11-21 19:21 JGAO編程隨筆 閱讀(2153) | 評論 (4)編輯 收藏

          ajax4jsf跟outputStream.write沖突?

          我在項目中引入ajax4jsf框架
          web.xml中加入

           <filter>
                  
          <display-name>Ajax4jsf Filter</display-name>
                  
          <filter-name>ajax4jsf</filter-name>
                  
          <filter-class>org.ajax4jsf.Filter</filter-class>
            
          </filter>
            
          <filter-mapping> 
                
          <filter-name>ajax4jsf</filter-name>
                
          <servlet-name>Faces Servlet</servlet-name>
                
          <dispatcher>REQUEST</dispatcher>
                
          <dispatcher>FORWARD</dispatcher>
                
          <dispatcher>INCLUDE</dispatcher>
           
          </filter-mapping>


          結果以前的輸出文件到客戶端的代碼就出問題了

                          InputStream fileInputStream = mgt.downloadToStream(result_pathEl.getTextTrim());
                          mgt.deleteFile(result_pathEl.getTextTrim());
          //刪除臨時的報表文件
                          JSFUtil.setSessionAttribute(sessionId, "true");
                          
          if( fileInputStream == null ){
                            System.out.println(
          "==========get inputstream is null========");
                          }


                          OutputStream o 
          = response.getOutputStream();
                          response.reset();
                          response.setContentType( 
          "APPLICATION/OCTET-STREAM" );
                          response.setHeader( 
          "Content-Disposition""attachment;filename=\"" + "exportExcel.xls""\"" );

                          
          int length;
                          
          byte buf[] = new byte[1024];

                          
          while ( ( length = fileInputStream.read( buf, 01024 ) ) != -1 ) {
                              o.write( buf, 
          0, length );
                          }

                          o.flush();
                          o.close();
                          fileInputStream.close();


          提示錯誤如下:主要是o.write出問題

          java.lang.NullPointerException
                  at org.ajax4jsf.framework.ajax.xmlfilter.FilterServletResponseWrapper$By
          teArrayServletOutputStream.write(FilterServletResponseWrapper.java:290)


          把web.xml中的ajax4jsf的filter給去掉后,一切又恢復正常

          有那位仁兄遇到同樣情況的嗎?

          posted @ 2007-11-19 20:16 JGAO編程隨筆 閱讀(450) | 評論 (1)編輯 收藏

          取程序的絕對路徑問題

          在本地tomcat5中這樣沒問題
          request.getRealPath("/")+"report/config/configFile/"+priv_id+".xml"

          但是發布到websphere6后就出問題了
          要改成
          request.getRealPath("/")+"/report/config/configFile/"+priv_id+".xml"

          就是report前要加個"/" 斜杠,加了后tomcat5下也是正確的

          posted @ 2007-11-09 18:25 JGAO編程隨筆 閱讀(252) | 評論 (0)編輯 收藏

          程序從oracle移植到db2遇到的問題

           

          1.jdk環境問題

          jdk環境要改為ibm jdk 5.0, 不然連接不上數據庫, 數據庫連接池的連接失敗,c3p0連接池的連接失敗,目前還是默認的方式采用應用服務器的連接池,像tomcat就采用tomcat配置的連接池

          eclipse 的開發時用的jre如果修改為ibm的以后,有可能會導致編譯不了,這要修改編輯器java類型的編碼為gb2312就可以了,genaral->content type –java file

          2. 程序中編寫sql時的用戶模式問題

          用戶模式要用公共常量,以便修改

          不同用戶模式之間的表的訪問通過授權來解決

          3. db2數據庫的函數問題

          程序中的添加和修改時間的地方的日期函數都要修改成

          Date(“2007-01-01”)就是字符串中間有帶中杠的

          日期轉字符串要把原先的to_char改成char(int(2007-01-01))

          Kpi的消息串在配置中在取權限priv_id的字符串要加上char(int(priv_id)),如果直接char(priv_id)會多出一個點號

          4. oracle樹形結構的查詢移植到db2存在問題

          菜單查詢中,有存在層次level的沒實現,目前我先通過自己寫的函數實現,但存在問題跟沒有層次的實現方式一樣存在問題

          因為通過in的方式,in的存在字段是有限的到時候數據量變多了,sql就會執行失敗,可以考慮臨時表來解決

          5. 序列表seq的長度問題

          所有的序列表的序列長度db2是有限制的,好像不能大于8位,這樣序列的字段都要做修改,而且不能重復,要進一步確認修改

          7. 系統權限移植問題

          地區編碼的字段從數值型改為字符串類型,很辛苦,建議以后程序的bean的屬性都用字符串來定義,避免程序移植的類型修改的問題

          8. erwin數據模型問題

          數據模型中的部分表沒有及時更新,跟開發時用的表有出入,以后數據模型要及時更新

          9. 建表的sql語句問題

                 建表的sql

           number(12) 這樣的都要改成decimal(12,0)

           varchar2都要改成varchar

          posted @ 2007-10-27 23:27 JGAO編程隨筆 閱讀(393) | 評論 (0)編輯 收藏

          用ibm的東西

          用ibm的東西前先裝ibm的jdk

          posted @ 2007-10-20 15:33 JGAO編程隨筆 閱讀(175) | 評論 (0)編輯 收藏

          表單提交后獲取不到控件的值

          有時候我們在表單提交后卻獲取不到控件的值
          可能原因:
          1. 控件少了name屬性
          2.控件被設置成disabled

          posted @ 2007-07-06 23:38 JGAO編程隨筆 閱讀(359) | 評論 (0)編輯 收藏

          OutputStream 轉 InputStream

          使用場合: 操作excel或pdf等文件時需要先寫到輸出流, 然后又要用到ftp上傳該excel或pdf文件需要用到輸入流作為參數,這時候我們就可以直接把該文件的輸出流轉為輸入流直接上傳到ftp服務器上

            1.
            ByteArrayOutputStream os 
          = new ByteArrayOutputStream();
            InputStream is 
          = new ByteArrayInputStream(os.toByteArray());

          posted @ 2007-06-18 22:41 JGAO編程隨筆 閱讀(4418) | 評論 (0)編輯 收藏

          設置file控件的按鈕樣式

          網上找的,分享一下
          <html>
          <script>
          function fclick(obj){
          with(obj){
          style.posTop
          =event.y-offsetHeight/2
          style.posLeft
          =event.x-offsetWidth/2
          }

          }

          </script>
          <style>
          input
          {border:1px solid #333333;color:#666666;background:#eeeeee;font:normal 12px Tahoma;height:18px}
          </style>
          <br>
          <br>
          <br>
          <table>
          <tr>
          <td>
          <form method="post" action="" enctype="multipart/form-data">
          <input id="f_file">&nbsp;<input type="button" onmouseover="fclick(t_file)" value="選擇上傳文件">
          <br>
          <input name="upload" type="file" style="position:absolute;filter:alpha(opacity=10);width:30px;" id="t_file" onchange="f_file.value=this.value" hidefocus>
          <br><input type="submit" value="提交">
          </form>
          </tr>
          </table>
          </html>

          posted @ 2007-06-14 23:03 JGAO編程隨筆 閱讀(2488) | 評論 (3)編輯 收藏

          進度條思想

          后臺數據處理完成的時候設置一個處理完成的session標志
          前臺通過發送ajax請求設置成功標志的session的頁面,如果session的成功標志為true則數據處理完成,關閉正在處理的進度條圖片,否則繼續發送ajax請求,顯示正在處理的進度條圖片,當然也可以通過后臺返回數據處理完成的百分比,來制作精確的進度條

          posted @ 2007-06-14 23:00 JGAO編程隨筆 閱讀(215) | 評論 (0)編輯 收藏

          動態設置checkbox的checked屬性

          當我們在做動態生成checkbox和動態設置checkbox的checked屬性的時候要注意
          只有checkbox在頁面生成以后設置checkbox的checked屬性才有效,否則是無效的
          也就是說不要在create checkbox后就設置checked屬性,要等到該checkbox已經append到頁面中了在來設置checked屬性這樣才可以

          posted @ 2007-05-22 23:44 JGAO編程隨筆 閱讀(1535) | 評論 (1)編輯 收藏

          response.sendredirect的問題

          1) 使用response.sendredirect重定向是沒辦法通過request.setAttribute來傳遞對象到另外一個頁面的
          但我們可以通過轉發的方式來實現request.getRequestDispatcher("test2.jsp").forward(request,response)
          這也是struts默認的頁面跳轉方式,這就是為什么我們可以在action里面request.setAttribute然后在頁面里request.getAttribute

          2) 使用response.sendredirect重定向要記得在后面加上return不然后面的語句還是會繼續往下執行的,還有就是response.sendredirect之前最好不要有任何的輸出語句包括html不然可能會重定向失敗
          最近我還遇到一個比較奇怪的問題就是response.sendredirect失敗,因為我的端口是通過交換機來轉換的所以可能就是在這里重定向不過去了,所以建議以后大家都使用request.getRequestDispatcher("test2.jsp").forward(request,response)這種方式就不會錯了,當然也可以用jsp標簽的forward

          posted @ 2007-05-07 21:47 JGAO編程隨筆 閱讀(1079) | 評論 (0)編輯 收藏

          可定制生命周期的緩存

               摘要: 1) ICache.java 緩存接口 package com.jgao.cache;/** *//** * 緩存接口 * @author jgao * */public interface ICache {      ...  閱讀全文

          posted @ 2007-04-22 06:18 JGAO編程隨筆 閱讀(1010) | 評論 (0)編輯 收藏

          獲取第N級的所有節點實現代碼

          ??? 基本的思想和步驟都在了,主要就是遞歸

          ??? /**
          ???? * 傳入級數返回存放該級數下所有組織列表的列表
          ???? * @param lever int 組織級數
          ???? * @return List<List> 存放組織列表
          ???? */

          ??? public List<List> getTreeLeverNode(int lever) {
          ??????? String sqlstr = "select? ID from?table1 where PARENT_ID=0";
          ??????? Result ret = Dao.executeQuery(sqlstr);
          ??????? List<List> list = new Vector<List>();
          ??????? List rslist = new Vector();
          ??????? List<String> nodeList = new Vector<String>();
          ??????? for (int i = 0; i < ret.Length(); i++) {
          ??????????? rslist = getNextNode(Integer.parseInt(ret[i]
          ??????????????????????? .toString()), lever - 1, nodeList);
          ??????????????? list.add(rslist);
          ??????? }
          ??????? return list;
          ??? }

          ??? /**
          ???? * 返回存放該級數下所有組織的列表
          ???? * @param reqParentid 請求傳入的父節點ID
          ???? * @param lever 組織級數
          ???? * @param list 存放該級數下所有組織的列表
          ???? * @return List<String> 存放組織
          ???? */

          ??? public List<String> getNextNode(int reqParentid, int lever, List list) {
          ??????? String sqlstr = "select? ID from?table1 where PARENT_ID="
          ??????????????? + reqParentid;
          ??????? DBResult ret = super.executeQuery(sqlstr);
          ??????? List rslist = new Vector();
          ??????? lever = lever - 1;
          ??????? if (lever > 0) {
          ???????????for (int i = 0; i < ret.Length(); i++) {
          ?????????????????rslist = getNextNode(Integer.parseInt(ret[i]
          ??????????????????????? .toString()), lever , nodeList);
          ??????????????? list.add(rslist);
          ???????????}
          ??????? } else {
          ??????????? for (int i = 0; i < ret.Length(); ; i++) {
          ????????????????list.add(ret[i].toString());
          ??????????? }
          ??????? }
          ??????? return list;
          ??? }

          posted @ 2007-01-15 20:30 JGAO編程隨筆 閱讀(125) | 評論 (0)編輯 收藏

          erwin連接oracle9i數據庫

          剛使用erwin時在連接oracle9i數據庫時的那個連接串我一直用jdbc連接oracle的那個格式,所以一直連都連不上
          一直出現“內部錯誤,hostdef擴展名不存在”,很是郁悶,不知大家有沒遇到
          后來查了一下,才知道本地的話要進行本地的Net服務名配置
          配置工具在開始->oracle->Configuration and Migration Tools->NET CONFIGUATION ASSISTANT
          然后選擇本地的Net服務名配置,在配置到服務名的時候把你的數據庫名稱添進去,然后往下到完成就行了

          也可以直接編輯tnsnames.ora,如下圖:

          接下來在erwin進行正向或者反向工程的操作界面,提示連接數據庫的那個連接字符串里輸入你的那個服務名就行了,當然用戶名密碼還是要跟之前的一樣,如下圖:

          posted @ 2007-01-14 17:23 JGAO編程隨筆 閱讀(3388) | 評論 (15)編輯 收藏

          獲取第N級的所有節點

          /**
          *臨時寫的偽代碼
          */

          //獲取第N級的所有節點

          public list getTreeLeverNode(int lever)
          ??rs0 = select id from menu where parentid is null;? //先從數據庫取出第一級的所有節點
          ??if(lever<=1)
          ? return rs0
          ? //循環第一級的節點遞歸取下面的節點
          ??for(int i=0; i<rs0.length; i++){
          ???rslist = getNextNode(rs0[i],lever-1);
          ???list.add(rslist);
          ??}
          ??return rs1;
          }

          public list getNextNode(int reqParentid,int lever){
          ??rs2 = select id from menu where parentid = reqParentid;
          ??lever = lever -1;
          ??if(lever>0){
          ???for(int i=0; i<rs2.length; i++){
          ????rs2 = getNextNode(rs2[i],lever);
          ????list.add(rs2);
          ???}
          ??}
          ??return rs2;
          }

          posted @ 2007-01-14 16:01 JGAO編程隨筆 閱讀(164) | 評論 (0)編輯 收藏

          數據操作控制

          ??????1.當執行一個功能的時候需要執行多個更新操作,如:插入多個對象,刪除多個對象等,就可能存在執行一個更新操作成功之后下一個更新操作失敗,那么這個功能的執行就算是失敗的,可是卻向數據庫添加或刪除了不完全的相關數據,所以就會出現臟數據
          ??????解決方法:
          ??????1) 通過事物控制讓多個執行語句一起提交commit,commit失敗的話就回滾rollback,做到事物的原子性原則
          ??????2) 在數據庫設置一個操作成功或失敗的字段(或者本地臨時文件里存放相關的控制數據),通過該字段進行控制,在執行出錯后刪除所有含有操作失敗字段的數據
          ???????
          ??????2.數據庫同步訪問控制:比如說一條記錄有兩個以上的用戶同時訪問,他們讀取出來的是相同的數據,但寫入時有先后,如果不做控制就會出現后來寫入的數據把原來做了更新的數據覆蓋,使原來做的更新操作丟失就是無效,因為他們都是在最原始讀取出來的數據上做的修改,而不是在別人做了修改后的數據上做修改
          ??????解決方法:
          ??????1) 可以在數據庫多設置一個版本字段來控制該數據的歷史版本號(或者本地臨時文件里存放相關的控制數據),就是沒個人做了修改以后都要更新一下這個版本字段,同時更新之前也要做一下版本的比較,如果現在的版本和之前取出來的數據的版本不一樣,那么就要從新讀取數據再寫入,這樣就可以保證不會丟失修改
          ?????

          posted @ 2007-01-14 12:00 JGAO編程隨筆 閱讀(178) | 評論 (0)編輯 收藏

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 静宁县| 弥渡县| 颍上县| 安平县| 浑源县| 称多县| 博罗县| 五原县| 米林县| 阜阳市| 佳木斯市| 汉川市| 乌恰县| 固原市| 同心县| 临武县| 浦北县| 灌阳县| 石城县| 桐城市| 通山县| 始兴县| 遂平县| 抚远县| 柯坪县| 安福县| 阿拉尔市| 德庆县| 隆尧县| 横山县| 双辽市| 镇雄县| 麻阳| 来凤县| 梧州市| 横山县| 陇南市| 邢台县| 遵化市| 车险| 隆子县|