zx_bing

          人生路漫漫,多學些知識總是有益處的
          隨筆 - 32, 文章 - 0, 評論 - 0, 引用 - 0
          數據加載中……

          2012年7月30日

          sql browser 無法啟動終極解決辦法

          一、為 SQL 啟用遠程連接

          1. 單擊“開始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后單擊“SQL Server 外圍應用配置器”。
          2. 在“SQL Server 2005 外圍應用配置器”頁上,單擊“服務和連接的外圍應用配置器”。
          3. 在“服務和連接的外圍應用配置器”頁上,展開“數據庫引擎”,依次單擊“遠程連接”和“本地連接和遠程連接”,單擊適用于您的環境的相應協議,然后單擊“應用”。

          注意:請在接收到以下消息時單擊“確定”:
          直到重新啟動數據庫引擎服務后,對連接設置所做的更改才會生效。
          4. 在“服務和連接的外圍應用配置器”頁上,展開“數據庫引擎”,依次單擊“服務”和“停止”,等待 MSSQLSERVER 服務停止,然后單擊“啟動”以重新啟動 MSSQLSERVER 服務。

          二、啟用 SQL Server Browser 服務

          1. 單擊“開始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后單擊“SQL Server 外圍應用配置器”。
          2. 在“SQL Server 2005 外圍應用配置器”頁上,單擊“服務和連接的外圍應用配置器”。
          3. 在“服務和連接的外圍應用配置器”頁上,單擊“SQL Server Browser”,在“啟動類型”中單擊“自動”選項,然后單擊“應用”。

          注意:在單擊“自動”選項后,每次啟動 Microsoft Windows 時將自動啟動 SQL Server Browser 服務。
          4. 單擊“啟動”,然后單擊“確定”。

          三、在 Windows 防火墻中為SQL Server
          2005 創建例外

          1. 在 Windows 防火墻中,單擊“例外”選項卡,然后單擊“添加程序”。
          2. 在“添加程序”窗口中,單擊“瀏覽”。
          3. 單擊 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe 可執行程序,單擊“打開”,然后單擊“確定”。

          注意:上述路徑可能會根據 SQL Server
          2005 的安裝位置而不同。

          四、在 Windows 防火墻中為 SQL Server Browser 服務創建例外

          1. 在 Windows 防火墻中,單擊“例外”選項卡,然后單擊“添加程序”。
          2. 在“添加程序”窗口中,單擊“瀏覽”。
          3. 單擊 C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe 可執行程序,單擊“打開”,然后單擊“確定”。

          注意:上述路徑可能會根據 SQL Server
          2005 的安裝位置而不同。

          五、遠程連接端口設置(很關鍵的一步,很多方法只講了一到四步,卻沒有講到第五步)

          1、在服務器上打開SQL Server Configuration Manager。選擇SQL Server配置治理器->SQL Server 2005網絡配置->MSSQLSERVER的協議->TCP/IP,在彈出對話框中選擇IP地址->IPALL->TCP端口,設置為可用端口。(如果默認的1433端口老是連接不上,你就設置為你確認已經打開的端口試試,如21端口等)

          2、在“服務和連接的外圍應用配置器”頁上,展開“數據庫引擎”,依次單擊“服務”和“停止”,等待 MSSQLSERVER 服務停止,然后單擊“啟動”以重新啟動 MSSQLSERVER 服務。

          六、測試連接

          1、打開SQL2005登陸界面,輸入服務器IP和用戶名及密碼。
          如:
          服務器名稱:
          192.168.1.200,21
          用戶名:sa
          密碼:sa
          點連接,結果連接成功。
          PS:上面的服務器名稱中的,21中的21第五步中第1步中設置的IPALL中的TCP端口

          posted @ 2012-07-30 07:23 zx_bing| 編輯 收藏

          2012年7月27日

          hibernate+java+sql 之間數據類型轉換關系














































































































          Hibernate映射類型java類型標準SQL類型
          integerjava.lang.Integerinteger
          longjava.lang.Longbigint
          shortjava.lang.Shortsmallint
          floatjava.lang.Floatfloat
          doublejava.lang.Floatdouble
          big_decimaljava.math.BigDecimalnumeric
          characterjava.lang.Stringchar(1)
          stringjava.lang.Stringvarchar
          bytebyte或java.lang.Bytetinyint
          booleanboolean或java.lang.Boolean  bit
          yes_no    boolean或java.lang.Booleanchar(1)('Y'/'N')
          true_falseboolean或java.lang.Booleanchar(1)('Y'/'N')
          datejava.util.Date或java.sql.Datedate
          timejava.util.Date或java.sql.Timetime
          timestampjava.util.Date或java.sql.timestamptimestamp
          calendarjava.util.Calendartimestamp
          calendar_datejava.util.Calendardate
          binarybyte[]varbinary或blob
          textjava.lang.Stringclob
          serializablejava.io.Serializable實例varbinary或blob
          clobjava.sql.Clobclob
          blobjava.sql.Blobvarbinary或blob
          classjava.lang.Classvarchar
          localejava.util.Localevarchar
          timezonejava.util.TimeZonevarchar
          currencyjava.util.Currencyvarchar

          posted @ 2012-07-27 14:37 zx_bing| 編輯 收藏

          外鍵查詢 遇到錯誤:could not initialize proxy - the owning Session was close

          關于lazy機制:

          延遲初始化錯誤是運用Hibernate開發項目時最常見的錯誤。如果對一個類或者集合配置了延遲檢索策略,那么必須當代理類實例或代理集合處于持久化狀態(即處于Session范圍內)時,才能初始化它。如果在游離狀態時才初始化它,就會產生延遲初始化錯誤。

          下面把Customer.hbm.xml文件的<class>元素的lazy屬性設為true,表示使用延遲檢索策略:

          <class name="mypack.Customer" table="CUSTOMERS" lazy="true">

          當執行Session的load()方法時,Hibernate不會立即執行查詢CUSTOMERS表的select語句,僅僅返回Customer類的代理類的實例,這個代理類具由以下特征:

          (1) 由Hibernate在運行時動態生成,它擴展了Customer類,因此它繼承了Customer類的所有屬性和方法,但它的實現對于應用程序是透明的。
          (2) 當Hibernate創建Customer代理類實例時,僅僅初始化了它的OID屬性,其他屬性都為null,因此這個代理類實例占用的內存很少。
          (3)當應用程序第一次訪問Customer代理類實例時(例如調用customer.getXXX()或customer.setXXX()方法), Hibernate會初始化代理類實例,在初始化過程中執行select語句,真正從數據庫中加載Customer對象的所有數據。但有個例外,那就是當應用程序訪問Customer代理類實例的getId()方法時,Hibernate不會初始化代理類實例,因為在創建代理類實例時OID就存在了,不必到數據庫中去查詢。

          提示:Hibernate采用CGLIB工具來生成持久化類的代理類。CGLIB是一個功能強大的Java字節碼生成工具,它能夠在程序運行時動態生成擴展 Java類或者實現Java接口的代理類。關于CGLIB的更多知識,請參考:http://cglib.sourceforge.net/。

          以下代碼先通過Session的load()方法加載Customer對象,然后訪問它的name屬性:

          tx = session.beginTransaction();
          Customer customer=(Customer)session.load(Customer.class,new Long(1));
          customer.getName();
          tx.commit();

          在運行session.load()方法時Hibernate不執行任何select語句,僅僅返回Customer類的代理類的實例,它的OID為1,這是由load()方法的第二個參數指定的。當應用程序調用customer.getName()方法時,Hibernate會初始化Customer代理類實例,從數據庫中加載Customer對象的數據,執行以下select語句:

          select * from CUSTOMERS where ID=1;
          select * from ORDERS where CUSTOMER_ID=1;

          當<class>元素的lazy屬性為true,會影響Session的load()方法的各種運行時行為,下面舉例說明。

          1.如果加載的Customer對象在數據庫中不存在,Session的load()方法不會拋出異常,只有當運行customer.getName()方法時才會拋出以下異常:

          ERROR LazyInitializer:63 - Exception initializing proxy
          net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 1, of class:
          mypack.Customer

          2.如果在整個Session范圍內,應用程序沒有訪問過Customer對象,那么Customer代理類的實例一直不會被初始化,Hibernate不會執行任何select語句。以下代碼試圖在關閉Session后訪問Customer游離對象:

          tx = session.beginTransaction();
          Customer customer=(Customer)session.load(Customer.class,new Long(1));
          tx.commit();
          session.close();
          customer.getName();

          由于引用變量customer引用的Customer代理類的實例在Session范圍內始終沒有被初始化,因此在執行customer.getName()方法時,Hibernate會拋出以下異常:

          ERROR LazyInitializer:63 - Exception initializing proxy
          net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed

          由此可見,Customer代理類的實例只有在當前Session范圍內才能被初始化。

          3.net.sf.hibernate.Hibernate類的initialize()靜態方法用于在Session范圍內顯式初始化代理類實例,isInitialized()方法用于判斷代理類實例是否已經被初始化。例如:

          tx = session.beginTransaction();
          Customer customer=(Customer)session.load(Customer.class,new Long(1));
          if(!Hibernate.isInitialized(customer))
          Hibernate.initialize(customer);
          tx.commit();
          session.close();
          customer.getName();

          以上代碼在Session范圍內通過Hibernate類的initialize()方法顯式初始化了Customer代理類實例,因此當Session關閉后,可以正常訪問Customer游離對象。

          4.當應用程序訪問代理類實例的getId()方法時,不會觸發Hibernate初始化代理類實例的行為,例如:

          tx = session.beginTransaction();
          Customer customer=(Customer)session.load(Customer.class,new Long(1));
          customer.getId();
          tx.commit();
          session.close();
          customer.getName();

          當應用程序訪問customer.getId()方法時,該方法直接返回Customer代理類實例的OID值,無需查詢數據庫。由于引用變量 customer始終引用的是沒有被初始化的Customer代理類實例,因此當Session關閉后再執行customer.getName()方法, Hibernate會拋出以下異常:

          ERROR LazyInitializer:63 - Exception initializing proxy
          net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed


          解決方法:

          由于hibernate采用了lazy=true,這樣當你用hibernate查詢時,返回實際為利用cglib增強的代理類,但其并沒有實際填充;當你在前端,利用它來取值(getXXX)時,這時Hibernate才會到數據庫執行查詢,并填充對象,但此時如果和這個代理類相關的session已關閉掉,就會產生種錯誤.
          在做一對多時,有時會出現"could not initialize proxy - clothe owning Session was sed,這個好像是hibernate的緩存問題.問題解決:需要在<many-to-one>里設置lazy="false". 但有可能會引發另一個異常叫

          failed to lazily initialize a collection of role: XXXXXXXX, no session or session was closed

          此異常解決方案請察看本人博客(http://hi.baidu.com/kekemao1)的Hibernate異常中的《failed to lazily initialize a collection of role異常》

          ?
          解決方法:在web.xml中加入
          <filter>
              <filter-name>hibernateFilter</filter-name>
              <filter-class>
               org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
              </filter-class>
          </filter
          <filter-mapping>
              <filter-name>hibernateFilter</filter-name>
              <url-pattern>*.do</url-pattern>
          </filter-mapping>
          就可以了;

          參考了:
          Hibernate與延遲加載:

          Hibernate對象關系映射提供延遲的與非延遲的對象初始化。非延遲加載在讀取一個對象的時候會將與這個對象所有相關的其他對象一起讀取出來。這有時會導致成百的(如果不是成千的話)select語句在讀取對象的時候執行。這個問題有時出現在使用雙向關系的時候,經常會導致整個數據庫都在初始化的階段被讀出來了。當然,你可以不厭其煩地檢查每一個對象與其他對象的關系,并把那些最昂貴的刪除,但是到最后,我們可能會因此失去了本想在ORM工具中獲得的便利。


          一個明顯的解決方法是使用Hibernate提供的延遲加載機制。這種初始化策略只在一個對象調用它的一對多或多對多關系時才將關系對象讀取出來。這個過程對開發者來說是透明的,而且只進行了很少的數據庫操作請求,因此會得到比較明顯的性能提升。這項技術的一個缺陷是延遲加載技術要求一個Hibernate會話要在對象使用的時候一直開著。這會成為通過使用DAO模式將持久層抽象出來時的一個主要問題。為了將持久化機制完全地抽象出來,所有的數據庫邏輯,包括打開或關閉會話,都不能在應用層出現。最常見的是,一些實現了簡單接口的DAO實現類將數據庫邏輯完全封裝起來了。一種快速但是笨拙的解決方法是放棄DAO模式,將數據庫連接邏輯加到應用層中來。這可能對一些小的應用程序有效,但是在大的系統中,這是一個嚴重的設計缺陷,妨礙了系統的可擴展性。

          在Web層進行延遲加載

          幸運的是,Spring框架為Hibernate延遲加載與DAO模式的整合提供了一種方便的解決方法。對那些不熟悉Spring與Hibernate集成使用的人,我不會在這里討論過多的細節,但是我建議你去了解Hibernate與Spring集成的數據訪問。以一個Web應用為例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我們可以隨意選擇一個類來實現相同的功能。兩種方法唯一的不同就在于interceptor在Spring容器中運行并被配置在web應用的上下文中,而Filter在Spring之前運行并被配置在web.xml中。不管用哪個,他們都在請求將當前會話與當前(數據庫)線程綁定時打開Hibernate會話。一旦已綁定到線程,這個打開了的Hibernate會話可以在DAO實現類中透明地使用。這個會話會為延遲加載數據庫中值對象的視圖保持打開狀態。一旦這個邏輯視圖完成了,Hibernate會話會在Filter的doFilter方法或者Interceptor的postHandle方法中被關閉。下面是每個組件的配置示例:



          Interceptor的配置:


          <beans>
          <bean id="urlMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          <property name="interceptors">
          <list>
          <ref bean="openSessionInViewInterceptor"/>
          </list>
          </property>
          <property name="mappings">

          </bean>

          <bean name="openSessionInViewInterceptor"
          class="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
          <property name="sessionFactory"><ref bean="sessionFactory"/></property>
          </bean>
          </beans>

          Filter的配置


          <web-app>

          <filter>
          <filter-name>hibernateFilter</filter-name>
          <filter-class>
          org.springframework.orm.hibernate.support.OpenSessionInViewFilter
          </filter-class>
          </filter>

          <filter-mapping>
          <filter-name>hibernateFilter</filter-name>
          <url-pattern>*. spring </url-pattern>
          </filter-mapping>

          </web-app>


          實現Hibernate的Dao接口來使用打開的會話是很容易的。事實上,如果你已經使用了Spring框架來實現你的Hibernate Dao,很可能你不需要改變任何東西。方便的HibernateTemplate公用組件使訪問數據庫變成小菜一碟,而DAO接口只有通過這個組件才可以訪問到數據庫。下面是一個示例的DAO:


          public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

          public Product getProduct(Integer productId) {
          return (Product)getHibernateTemplate().load(Product.class, productId);
          }

          public Integer saveProduct(Product product) {
          return (Integer) getHibernateTemplate().save(product);
          }

          public void updateProduct(Product product) {
          getHibernateTemplate().update(product);
          }
          }


          在業務邏輯層中使用延遲加載

          即使在視圖外面,Spring框架也通過使用AOP 攔截器 HibernateInterceptor來使得延遲加載變得很容易實現。這個Hibernate 攔截器透明地將調用配置在Spring應用程序上下文中的業務對象中方法的請求攔截下來,在調用方法之前打開一個Hibernate會話,然后在方法執行完之后將會話關閉。讓我們來看一個簡單的例子,假設我們有一個接口BussinessObject:


          public     interface    BusinessObject     {
          public     void    doSomethingThatInvolvesDaos();
          }
          類BusinessObjectImpl實現了BusinessObject接口:

          public     class    BusinessObjectImpl    implements    BusinessObject     {
          public     void    doSomethingThatInvolvesDaos()     {
          //    lots of logic that calls
          //    DAO classes Which access
          //    data objects lazily 





          通過在Spring應用程序上下文中的一些配置,我們可以讓將調用BusinessObject的方法攔截下來,再令它的方法支持延遲加載。看看下面的一個程序片段:



          <beans>
          <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
          <property name="sessionFactory">
          <ref bean="sessionFactory"/>
          </property>
          </bean>
          <bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">
          <property name="someDAO"><ref bean="someDAO"/></property>
          </bean>
          <bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="target"><ref bean="businessObjectTarget"/></property>
          <property name="proxyInterfaces">
          <value>com.acompany.BusinessObject</value>
          </property>
          <property name="interceptorNames">
          <list>
          <value>hibernateInterceptor</value>
          </list>
          </property>
          </bean>
          </beans>

          當businessObject被調用的時候,HibernateInterceptor打開一個Hibernate會話,并將調用請求傳遞給BusinessObjectImpl對象。當BusinessObjectImpl執行完成后,HibernateInterceptor透明地關閉了會話。應用層的代碼不用了解任何持久層邏輯,還是實現了延遲加載。


          在單元測試中測試延遲加載

          最后,我們需要用J-Unit來測試我們的延遲加載程序。我們可以輕易地通過重寫TestCase類中的setUp和tearDown方法來實現這個要求。我比較喜歡用這個方便的抽象類作為我所有測試類的基類。


          public abstract class MyLazyTestCase extends TestCase {

          private SessionFactory sessionFactory;
          private Session session;

          public void setUp() throws Exception {
          super.setUp();
          SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
          session = SessionFactoryUtils.getSession(sessionFactory, true);
          Session s = sessionFactory.openSession();
          TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));

          }

          protected Object getBean(String beanName) {
          //Code to get objects from Spring application context
          }

          public void tearDown() throws Exception {
          super.tearDown();
          SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
          Session s = holder.getSession();
          s.flush();
          TransactionSynchronizationManager.unbindResource(sessionFactory);
          SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
          }

          --------------------------------------------------------------
          --------------------------------------------------------------

          Java代碼 復制代碼 收藏代碼
          1. <?xml version="1.0"?> 
          2. <!DOCTYPE hibernate-mapping PUBLIC 
          3.     "-//Hibernate/Hibernate Mapping DTD//EN" 
          4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          5. <hibernate-mapping package="com.isoftstone.lms.model"
          6.     <class name="Order" table="sv_order"
          7.         <id name="orderId" column="sv_order_id" type="string"
          8.             <generator class="sequence"
          9.                 <param name="sequence">SEQ_ORDERID</param> 
          10.             </generator> 
          11.         </id> 
          12.          
          13.         many-to-one name="style" column="sv_style_id" lazy="false" /> 
          14.         <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
          15.         <many-to-one name="client" column="sv_client_id" lazy="false" /> 
          16.         <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
          17.         <property name="orderNo" column="sv_order_orderno" type="long" /> 
          18.         <property name="createDate" column="sv_order_createdate" type="date" /> 
          19.         <property name="sendDate" column="sv_order_senddate" type="string" /> 
          20.         <property name="sendAddress" column="sv_order_sendAddress" type="string" /> 
          21.         <property name="accepter" column="sv_order_accepter" type="string" /> 
          22.         <property name="postNo" column="sv_order_postNo" type="string" /> 
          23.         <property name="phone" column="sv_order_phone" type="string" /> 
          24.         <property name="totalMoney" column="sv_order_totalmoney" type="double" /> 
          25.         <property name="isinvoice" column="sv_order_isinvoice" type="int" /> 
          26.         <property name="remark" column="sv_order_remark" type="string" /> 
          27.          
          28.         <set name="orderGoodss" inverse="true" lazy="extra" cascade="all"
          29.             <key column="sv_order_id"/> 
          30.             <one-to-many class="OrderGoods"/> 
          31.         </set> 
          32.     </class
          33. </hibernate-mapping> 

          [color=red]
          Java代碼 復制代碼 收藏代碼
          1. <many-to-one name="style" column="sv_style_id" lazy="false" /> 
          2. <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
          3. <many-to-one name="client" column="sv_client_id" lazy="false" /> 
          4. <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
          [/color]

          posted @ 2012-07-27 14:13 zx_bing| 編輯 收藏

          Hibernate基于外鍵查詢

          Java代碼 復制代碼 收藏代碼
          1. public List<Order> getClientOrder(String clientId) { 
          2.  
          3.         Session session = null
          4.         List<Order> orderList = null
          5.         try
          6.             session = HibernateUtil.getSession(); 
          7.             session.beginTransaction(); 
          8.             orderList = session.createQuery("from Order o where o.client.clientId = ?"
          9.                                 .setParameter(1,clientId) 
          10.                                 .list(); 
          11.             session.getTransaction().commit(); 
          12.         } catch (Exception e) { 
          13.             e.printStackTrace(); 
          14.             session.getTransaction().rollback(); 
          15.         } finally
          16.             HibernateUtil.closeSession(session); 
          17.         } 
          18.  
          19.         return orderList; 
          20.     } 

          posted @ 2012-07-27 14:11 zx_bing| 編輯 收藏

          hibernate 多條件查詢

          Java代碼 復制代碼 收藏代碼
          1. public List<Client> searchClients(String clientName, String tel, 
          2.             String identityNo) { 
          3.  
          4.         StringBuffer sb = new StringBuffer("from Client c where 1=1"); 
          5.          
          6.         if(clientName != null && !"".equals(clientName) ){ 
          7.             sb.append("and c.name like '%" + clientName + "%'"); 
          8.         } 
          9.         if(tel != null && !"".equals(tel)){ 
          10.             sb.append("and c.tel = " + tel); 
          11.         } 
          12.         if(identityNo != null && !"".equals(identityNo)){ 
          13.             sb.append("and c.identityNo = " + identityNo); 
          14.         } 
          15.         return clientDao.searchClients(sb.toString()); 

          posted @ 2012-07-27 14:08 zx_bing| 編輯 收藏

          輸入框要求用JAVASCRIPT去驗證不能超過12個數字或英文或數字英文組合,還要求不能超過6個漢字,還要驗證漢字和字母,數字的組合

          <input name="username" value="" length="12" maxlengthd="12"/>
          數據庫里面username vachar2(12)

          這個輸入框要求用JAVASCRIPT去驗證不能超過12個數字或英文或數字英文組合,還要求不能超過6個漢字,還要驗證漢字和字母,數字的組合

          如:用戶名1999(就可以),麥克斯韋1999(就不行)

          因為數據庫里面要求的長度是12,一個漢字就占兩個,但是在頁面可以輸入12個漢字
          請用JAVASCRIPT寫出你的解決方案?



          Js代碼 復制代碼 收藏代碼
          1. <html>   
          2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
          3. 輸入待測字串: &nbsp;<input type="text" onblur="test(this.value);">   
          4. </html>   
          5. <script language="javascript">   
          6. <!--    
          7. //測試匹配情況    
          8. function test(inputVal)    
          9. {    
          10.     //去除首尾空格    
          11.     inputValinputVal = inputVal.replace(/^\s*|\s*$/g,"");    
          12.     //零長字串不作處理    
          13.     if ( inputVal.length == 0 )    
          14.     {    
          15.         return;    
          16.     }    
          17.     //只能匹配數字,字母或漢字    
          18.     var _match = inputVal.match(/^[a-zA-Z0-9\u4e00-\u9fa5]+$/g);    
          19.     //匹配數字或字母(包括大小寫)    
          20.     var codeMatch = inputVal.match(/[a-zA-Z0-9]/g);    
          21.     //匹配漢字    
          22.     var charMatch = inputVal.match(/[\u4e00-\u9fa5]/g);    
          23.     //數字或字母個數    
          24.     var codeNum = codeMatch ? codeMatch.length : 0;    
          25.     //漢字個數    
          26.     var charNum = charMatch ? charMatch.length : 0;    
          27.     //成功    
          28.     if ( _match && codeNum + 2*charNum <= 12 )    
          29.     {    
          30.         alert("輸入正確!");    
          31.         return;    
          32.     }    
          33.     //失敗    
          34.     alert("輸入錯誤!");     
          35. }    
          36. //-->   
          37. </script> 

          posted @ 2012-07-27 14:06 zx_bing| 編輯 收藏

          Ajax 模擬動態列表

          three.html
          Java代碼 復制代碼 收藏代碼
          1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          2. <html> 
          3.     <head> 
          4.         <title>index.html</title> 
          5.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
          6.         <meta http-equiv="description" content="this is my page"
          7.         <meta http-equiv="content-type" content="text/html; charset=GBK"
          8.         <script type="text/javascript"
          9.         var xmlhttp; 
          10.         function loadXMLDoc(valueFromSelect1){ 
          11.             var url = "three.jsp?valueFromSelect=" + valueFromSelect1 + "&" + Math.random(); 
          12.             alert(url); 
          13.             xmlhttp=null
          14.             if (window.XMLHttpRequest){ 
          15.               xmlhttp=new XMLHttpRequest(); 
          16.             } 
          17.             else if (window.ActiveXObject){ 
          18.               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
          19.             } 
          20.             if (xmlhttp!=null){ 
          21.               xmlhttp.onreadystatechange=updatePage; 
          22.               xmlhttp.open("GET",url,true); 
          23.               xmlhttp.send(null); 
          24.             } 
          25.             else
          26.               alert("Your browser does not support XMLHTTP."); 
          27.             } 
          28.         } 
          29.          
          30.         function state_Change(){ 
          31.             if (xmlhttp.readyState==4){ 
          32.                 if (xmlhttp.status==200){ 
          33.                     updatePage(); 
          34.                 } 
          35.                 else
          36.                     alert("Problem retrieving XML data"); 
          37.                 } 
          38.             } 
          39.         } 
          40.          
          41.         function updatePage(){             
          42.             // 清空select2 
          43.             while(select2.options[0] != null){ 
          44.                 select2.options[0] = null
          45.             } 
          46.              
          47.             // 設置select2 
          48.             var xmlDoc = xmlhttp.responseXML; 
          49.             alert(xmlDoc); 
          50.             var labelValueBeanElements = xmlDoc.getElementsByTagName("labelValueBean"); 
          51.            
          52.             for (var i = 0; i < labelValueBeanElements.length; i++){ 
          53.                 var entityValue = xmlDoc.getElementsByTagName("value")[i].childNodes[0].nodeValue; 
          54.                 var entityLabel = xmlDoc.getElementsByTagName("label")[i].childNodes[0].nodeValue; 
          55.                 select2.options[i] = new Option(entityLabel,entityValue,false,false); 
          56.             } 
          57.         } 
          58.         </script> 
          59.     </head> 
          60.  
          61.     <body> 
          62.         select1: 
          63.         <select id="select1" onchange="loadXMLDoc(this.value)"
          64.             <option value="1">1</option> 
          65.             <option value="2">2</option> 
          66.         </select> 
          67.         <br/> 
          68.         select2: 
          69.         <select id="select2"
          70.         </select> 
          71.         <input type="button" value="顯示select2的值" onclick="alert(select2.value)"
          72.     </body> 
          73. </html> 






          three.jsp
          Java代碼 復制代碼 收藏代碼
          1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
          2.     pageEncoding="UTF-8"%> 
          3.      
          4. <%! 
          5.     private String fromDB (String valueFromSelect)  { 
          6.         StringBuffer sb = new StringBuffer(); 
          7.  
          8.         if (valueFromSelect.equals("1")) { 
          9.             sb.append("    <labelValueBean>\n"); 
          10.             sb.append("        <value>haha</value>\n"); 
          11.             sb.append("        <label>哈哈</label>\n"); 
          12.             sb.append("    </labelValueBean>\n"); 
          13.             sb.append("    <labelValueBean>\n"); 
          14.             sb.append("        <value>hehe</value>\n"); 
          15.             sb.append("        <label>呵呵</label>\n"); 
          16.             sb.append("    </labelValueBean>\n"); 
          17.         } else if (valueFromSelect.equals("2")) { 
          18.             sb.append("    <labelValueBean>\n"); 
          19.             sb.append("        <value>heihei</value>\n"); 
          20.             sb.append("        <label>嘿嘿</label>\n"); 
          21.             sb.append("    </labelValueBean>\n"); 
          22.             sb.append("    <labelValueBean>\n"); 
          23.             sb.append("        <value>gaga</value>\n"); 
          24.             sb.append("        <label>嘎嘎</label>\n"); 
          25.             sb.append("    </labelValueBean>\n"); 
          26.             sb.append("    <labelValueBean>\n"); 
          27.             sb.append("        <value>woyun</value>\n"); 
          28.             sb.append("        <label>我暈</label>\n"); 
          29.             sb.append("    </labelValueBean>\n"); 
          30.             sb.append("    <labelValueBean>\n"); 
          31.             sb.append("        <value>123</value>\n"); 
          32.             sb.append("        <label>456</label>\n"); 
          33.             sb.append("    </labelValueBean>\n"); 
          34.         } 
          35.         return sb.toString(); 
          36.     } 
          37.  
          38. %> 
          39. <% 
          40.     String valueFromSelect = request.getParameter("valueFromSelect"); 
          41.  
          42.     StringBuffer sb = new StringBuffer(); 
          43.     sb.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>\n"); 
          44.     sb.append("<resultFromDB>\n"); 
          45.     sb.append(fromDB(valueFromSelect)); 
          46.     sb.append("</resultFromDB>\n"); 
          47.     response.setHeader("content-type", "text/xml;charset=GBK"); 
          48.     System.out.println(sb); 
          49.     out.println(sb.toString()); 
          50.     //out.flush(); 
          51.     out.close(); 
          52.      
          53.     %> 

          posted @ 2012-07-27 14:04 zx_bing| 編輯 收藏

          全選調用的JS函數

          Java代碼 復制代碼 收藏代碼
          1. function selectall()  
          2. {  
          3.     //獲取頁面上所有的輸入元素 
          4.     var a = document.getElementsByTagName("input");  
          5.     //如果全選按鈕按上 
          6.     if(document.getElementById("quanxuanbutton").checked == true
          7.     { 
          8.         //循環是checkbox類型的,就設置為true 
          9.         for (var i=0; i<a.length; i++) 
          10.         { 
          11.             if (a[i].type == "checkbox"
          12.             { 
          13.                 a[i].checked =true
          14.             } 
          15.         }        
          16.          
          17.     }else{ //如果全選按鈕沒有按上 
          18.       for (var i=0; i<a.length; i++) 
          19.         { 
          20.             if (a[i].type == "checkbox"
          21.             { 
          22.                  
          23.                 a[i].checked =false
          24.             } 
          25.         }   
          26.     } 
          27. }  

          posted @ 2012-07-27 14:03 zx_bing| 編輯 收藏

          dwr 實現二級聯動 js

          Java代碼 復制代碼 收藏代碼
          1. //省市聯動  
          2. var c_cigy = ''
          3. //記錄第二個列表id,以備回調函數用 
          4. var cityItemName = ''
          5.  
          6. function  changeCityOyp(province,city,relateItemName) { 
          7.     ServerDwrUtil.getCityList(province.value,setCityOption); 
          8.     //記錄二級下拉的 id relateItemName 供回調函數使用 
          9.     cityItemName = relateItemName; 
          10.     // 中國 則 二級下拉 不能選擇 
          11.     if(province.value == '0001') { 
          12.         document.getElementById(cityItemName).disabled = true
          13.     } else
          14.         document.getElementById(cityItemName).disabled = false
          15.     } 
          16.     //省份在一個單元格里,省份前面有個input輸入框,得到input對象,再把省份傳進去 
          17.     var provinceInput  = province.parentNode.firstChild; 
          18.     //如果省份為空,則單元格為空 
          19.     if (province.value == '') { 
          20.         provinceInput.value = ''
          21.         return
          22.     } 
          23.     provinceInput.value = province.options[province.selectedIndex].text; 
          24.      
          25. // 回調函數 args返回的是list.add(Map) map中{id},經過 spring配置 對于一些特例返回的Class,且dwr不能識別的, 
          26. //</dwr:configuration> 
          27. // 設置二級下拉列表 
          28. function setCityOption (args) { 
          29.     alert(args.toString()); 
          30.     DWRUtil.removeAllOptions(cityItemName); 
          31.     DWRUtil.addOptions(cityItemName, [ "" ]); 
          32.     //id和name怎么確保的   args{[id:xxx,name:yyy],[id:xxx,name:yyyy]} 
          33.     DWRUtil.addOptions(cityItemName, args, "id", "name"); 

          posted @ 2012-07-27 14:02 zx_bing| 編輯 收藏

          javascript獲取select的值全解

          Js代碼 復制代碼 收藏代碼
          1. 獲取顯示的漢字 
          2.  
          3. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
          4.  
          5. 獲取數據庫中的id 
          6.  
          7. window.document.getElementById("bigclass").value 
          8.  
          9. 獲取select組分配的索引id 
          10.  
          11. window.document.getElementById("bigclass").selectedIndex 
          12.  
          13.  
          14. 例子: 
          15.  
          16. <select name="bigclass" id="bigclass" onChange="javascript:updatePage2();"
          17. <option value="" selected="selected">ajax實驗</option> 
          18. <option value="4">我適宜市哈</option> 
          19. </select> 
          20.  
          21.  
          22. 使用 
          23. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
          24. 的結果是:我適宜市哈 
          25.  
          26. 使用 
          27. window.document.getElementById("bigclass").value 
          28. 的結果是:4 
          29.  
          30. 使用 
          31. window.document.getElementById("bigclass").selectedIndex 
          32. 的結果是:1 

          posted @ 2012-07-27 14:01 zx_bing| 編輯 收藏

          主站蜘蛛池模板: 徐州市| 灯塔市| 长沙市| 辽宁省| 合肥市| 合作市| 静乐县| 仪征市| 济源市| 榆中县| 通辽市| 亳州市| 磴口县| 鄂托克旗| 禹城市| 咸宁市| 毕节市| 合川市| 凤凰县| 许昌县| 济阳县| 台中市| 南江县| 那曲县| 朝阳县| 达日县| 富宁县| 新野县| 边坝县| 深州市| 溆浦县| 司法| 宁津县| 嵩明县| 河津市| 文登市| 贡觉县| 泽库县| 微博| 泾川县| 房产|