【Hibernate總結系列】....hbm.xml配置

           Hibernate中,各表的映射文件….hbm.xml可以通過工具生成,例如在使用MyEclipse開發時,它提供了自動生成映射文件的工具。本節簡單的講述一下這些配置文件的配置。

                 配置文件的基本結構如下:

          <?xml version="1.0" encoding='UTF-8'?>

          <!DOCTYPE hibernate-mapping PUBLIC

                                      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="包名">

          <class name="類名" table="表名">

                            <id name="主鍵在java類中的字段名" column="對應表中字段" type="類型 ">

                              <generator class="主鍵生成策略"/>

          </id>

                   ……

              </class>

          </hibernate-mapping>

          1. 主鍵(id

                 Hibernate的主鍵生成策略有如下幾種:

          1)  assigned

          主鍵由外部程序負責生成,在 save() 之前指定。

          2)  hilo

          通過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表或字段提供高位值來源。

          3)  seqhilo

          hilo 類似,通過hi/lo 算法實現的主鍵生成機制,需要數據庫中的 Sequence,適用于支持 Sequence 的數據庫,如Oracle。

          4)  increment

          主鍵按數值順序遞增。此方式的實現機制為在當前應用實例中維持一個變量,以保存著當前的最大值,之后每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是:不能在集群下使用。

          5)  identity

          采用數據庫提供的主鍵生成機制。如DB2、SQL Server、MySQL 中的主鍵生成機制。

          6)  sequence

          采用數據庫提供的 sequence 機制生成主鍵。如 Oralce 中的Sequence。

          7)  native

          由 Hibernate 根據使用的數據庫自行判斷采用 identity、hilo、sequence 其中一種作為主鍵生成方式。

          8)  uuid.hex

          由 Hibernate 基于128 位 UUID 算法 生成16 進制數值(編碼后以長度32 的字符串表示)作為主鍵。

          9)  uuid.string

          uuid.hex 類似,只是生成的主鍵未進行編碼(長度16),不能應用在 PostgreSQL 數據庫中。

          10) foreign

          使用另外一個相關聯的對象的標識符作為主鍵。

          主鍵配置舉例如下:

          <id name="id" column="id" type="java.lang.Integer">

                       <generator class="native"/>

          </id>

          另外還可以擴展Hibernate的類來做自己的主鍵生成策略,具體例子見:http://www.javaeye.com/topic/93391。

          2. 普通屬性(property

                 開發人員可以打開網址:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd

          來查看hibernate3.0dtd信息,可看到property的定義如下:

          <!ELEMENT property (meta*,(column|formula)*,type?)>
                              <!ATTLIST property name CDATA #REQUIRED>
                              <!ATTLIST property node CDATA #IMPLIED>
                              <!ATTLIST property access CDATA #IMPLIED>
                              <!ATTLIST property type CDATA #IMPLIED>
                              <!ATTLIST property column CDATA #IMPLIED>
                              <!ATTLIST property length CDATA #IMPLIED>
                              <!ATTLIST property precision CDATA #IMPLIED>
                              <!ATTLIST property scale CDATA #IMPLIED>
                              <!ATTLIST property not-null (true|false) #IMPLIED>
                              <!ATTLIST property unique (true|false) "false">
                              <!ATTLIST property unique-key CDATA #IMPLIED>
                              <!ATTLIST property index CDATA #IMPLIED>                                                                                  <!-- include the columns spanned by this property in an index -->
                              <!ATTLIST property update (true|false) #IMPLIED>
                              <!ATTLIST property insert (true|false) #IMPLIED>
                              <!ATTLIST property optimistic-lock (true|false) "true">          <!-- only supported for properties of a class (not component) -->
                              <!ATTLIST property formula CDATA #IMPLIED>
                              <!ATTLIST property lazy (true|false) "false">
              <!ATTLIST property generated (never|insert|always) "never">

                 它的各屬性中比較常用的有:name(對應的java類的屬性名稱)、column(對應的表中的字段)、tyope(屬性的類型,eg.java.lang.String)、not-null(設置該屬性是否為空,為true時表示非空,默認為false)和length(字段的長度限制)

                   Eg1. <property name="accessname" column="accessName" type="java.lang.String" not-null="true" />

                   Eg2. <property name="state" column="state" type="java.lang.Byte" not-null="true" />

          Eg3. <property name="description" column="description" type="java.lang.String" />

          3. 一對多關系(<many-to-one…/><set…></set>

                 一對多關系一般是用在一個表與另一個表存在外鍵關聯的時候,例如用戶表的組織id與組織表存在外鍵關聯,則“一”方為組織表,“多”方為用戶表,因為一個組織可以包含多個用戶,而一個用戶只能隸屬于一個組織。

          對于存在一對多關系和多對一關系的雙方,需要在…hbm.xml中進行相應配置,這時在“一”方(例如:組織)需要在映射文件中添加<set…></set>元素,因為它包含多個“多”方的對象,一般的格式如下:

          <set name="java映射類中對應的屬性" inverse="true" lazy="true">

          <key column="表中對應字段"/>

                        <one-to-many class="多方的類"/>

          </set>

                 Eg.

          <set name="userSet" inverse="true" lazy="true">

                            <key column="orgId"/>

          <one-to-many class="User"/>

          </set>

          “多”方(例如:用戶)隸屬于一個“一”方對象,一般的格式如下:

          <many-to-one name="java映射類中對應的屬性" column="表中對應字段" class="類名" not-null="true" />

          Eg.

          <many-to-one name="org" column="orgId" class="Organization" not-null="true" />

          4. 一對一關系(<one-to-one…/>

          一對一關系相對一對多關系來說比較少見,但也在某些情況下要用到,例如有一個用戶的基本信息表(USER)和一個用戶的密碼表(PASSWD)就存在一對一的關系。下面來看一下一對一關系在Hibernate的配置。

          其中主表(eg. 用戶的基本信息表)的配置如下:

          <one-to-one name="主表對象中子表對象的屬性名" class="子表對象的類名" cascade="save-update"/>

          Eg. <one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/>

          子表(eg. 用戶的密碼表)的配置如下:

          <one-to-one name="子表對象中主表對象的屬性名" class="主表對象的類名" constrained="true" />

          Eg. <one-to-one name="user" class="com.amigo.dao.pojo.User " constrained="true" />

          5. 多對多關系(<many-to-many…/>

          在數據庫設計時,一般將多對多關系轉換為兩個一對多(或多對一)關系,例如在基于角色的權限系統中,用戶和角色存在的關系就是典型的多對多關系,即一個用戶可以具有多個角色,而一個角色又可以為多個用戶所有,一般在設計時,都會加一個用戶與角色的關聯表,該表與用戶表以及角色表都存在外鍵關聯。

          在本小節中講述的是沒有分解的多對多關系在Hibernate中如何配置。設置格式如下:

          <set name="java對象的屬性名" table="表名" cascade="all" outer-join="false">  

          <key column="表的對應字段"/>  

          <many-to-many class="另一個表的對象類" column="另一個表的字段"/>  

          </set>  

          Eg. 上述的多對多關系可以表示為:

          t_user方:

          <set name="roleSet" table="t_user" cascade="all" outer-join="false">  

          <key column="roleId"/>  

          <many-to-many class="com.amigo.dao.pojo.Role" column="roleId"/>  

          </set>  

          t_role方:

          <set name="userSet" table="t_role" cascade="all" outer-join="false">  

          <key column="roleId"/>  

          <many-to-many class="com.amigo.dao.pojo.User" column="roleId"/>  

          </set>

          6. 完整實例

          在本小節中舉一些.hbm.xml映射文件的例子,讓開發人員對其有一個感性的認識。接下來講述一個用戶表(tbl_user)、用戶與角色關聯表(tbl_user_role)、角色表(tbl_role)以及組織表(tbl_organization)的例子。

          1tbl_user

          <?xml version="1.0" encoding='UTF-8'?>

          <!DOCTYPE hibernate-mapping PUBLIC

                                      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="com.amigo.dao.pojo">

              <class name="User" table="tbl_user">

                  <id name="loginname" column="loginName" type="java.lang.String">

                      <generator class="assigned"/>

                  </id>

           

                  <property name="name" column="name" type="java.lang.String" not-null="true" />

                  <property name="password" column="password" type="java.lang.String" not-null="true" />

                  <property name="mobile" column="mobile" type="java.lang.String" />

                  <property name="telephone" column="telephone" type="java.lang.String" />

                  <property name="email" column="email" type="java.lang.String" />

                  <property name="createtime" column="createTime" type="java.util.Date" not-null="true" />

                  <property name="lastlogintime" column="lastLoginTime" type="java.util.Date" />

                  <property name="logintimes" column="loginTimes" type="java.lang.Long" not-null="true" />

                  <property name="state" column="state" type="java.lang.Byte" not-null="true" />

                  <property name="description" column="description" type="java.lang.String" />

           

                  <many-to-one name="organization" column="orgId" class="Organization" not-null="true" />

                  <set name="userRoleSet" inverse="true" cascade="all-delete-orphan" lazy="true">

                      <key column="loginName"/>

                      <one-to-many class="UserRole"/>

                  </set>

          </hibernate-mapping>

          2tbl_organization

          <?xml version="1.0" encoding='UTF-8'?>

          <!DOCTYPE hibernate-mapping PUBLIC

                                      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="com.amigo.dao.pojo">

              <class name="Organization" table="tbl_organization">

                  <id name="orgid" column="orgId" type="java.lang.Long">

                      <generator class="native"/>

                  </id>

           

                  <property name="parentorgid" column="parentOrgId" type="java.lang.Long" not-null="true" />

                  <property name="orgname" column="orgName" type="java.lang.String" not-null="true" />

                  <property name="orgfullname" column="orgFullName" type="java.lang.String" />

                  <property name="orglevel" column="orgLevel" type="java.lang.Integer" not-null="true" />

                  <property name="state" column="state" type="java.lang.Byte" not-null="true" />

                  <property name="description" column="description" type="java.lang.String" />

                  <property name="creator" column="creator" type="java.lang.String" />

                  <property name="createtime" column="createTime" type="java.util.Date" />

                  <set name="userSet" inverse="true" lazy="true">

                      <key column="orgId"/>

                      <one-to-many class="User"/>

                  </set>

              </class>

          </hibernate-mapping>

          3tbl_user_role

          <?xml version="1.0" encoding='UTF-8'?>

          <!DOCTYPE hibernate-mapping PUBLIC

                                      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="com.cotel.netvote.dao.model">

              <class name="UserRole" table="tbl_user_role">

                  <id name="urid" column="urId" type="java.lang.Integer">

                      <generator class="native"/>

                  </id>

                  <many-to-one name="role" column="roleId" class="Role" not-null="true" />

                  <many-to-one name="user" column="loginName" class="User" not-null="true" />

              </class>

          </hibernate-mapping>

          4tbl_ role

          <?xml version="1.0" encoding='UTF-8'?>

          <!DOCTYPE hibernate-mapping PUBLIC

                                      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

          <hibernate-mapping package="com.cotel.netvote.dao.model">

              <class name="Role" table="tbl_role">

                  <id name="roleid" column="roleId" type="java.lang.Integer">

                      <generator class="native"/>

                  </id>

           

                  <property name="rolename" column="roleName" type="java.lang.String" not-null="true" />

                  <property name="createdate" column="createDate" type="java.util.Date" not-null="true" />

                  <property name="description" column="description" type="java.lang.String" />

           

                  <set name="userRoleSet" inverse="true" lazy="true" cascade="all">

                      <key column="roleId"/>

                      <one-to-many class="UserRole"/>

                  </set>

              </class>

          </hibernate-mapping>

          http://www.aygfsteel.com/amigoxie/archive/2007/12/31/171831.html

          posted @ 2008-11-15 21:17 smallfa 閱讀(417) | 評論 (0)編輯 收藏

          搞定struts+spring+hibernate 配置

          1:spring 跟hibernate版本沖突
          2:spring 配置問題
          3:找不到對應的類
          4:hibernate動態生成sprinDAO生成對應實體的XML映射表需要做一些修改

          spring+hibernate 一個奇怪的問題 (求助) SQL Error: 1146, SQLState: 42S02

          http://hi.baidu.com/fgfd0/blog/item/1d96232e79a20d524fc22680.html
          http://www.javaeye.com/topic/79071

          posted @ 2008-11-14 18:48 smallfa 閱讀(216) | 評論 (0)編輯 收藏

          spring+hibernate 一個奇怪的問題 (求助) SQL Error: 1146, SQLState: 42S02

          http://hi.baidu.com/fgfd0/blog/item/1d96232e79a20d524fc22680.html
          http://www.javaeye.com/topic/79071

          posted @ 2008-11-14 18:34 smallfa 閱讀(3708) | 評論 (0)編輯 收藏

          org.apache.catalina.core.AprLifecycleListener]-[INFO] The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

          ubuntu

          TOMCAT昨天突然自己宕掉服務了,怎么重起都不行,后來查看logs中catalina.out 日志發現如下錯誤
          INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.6.0_01/jre/lib/i386/client:/usr/local/jdk1.6.0_01/jre/lib/i386:/usr/local/jdk1.6.0_01/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
          Aug 24, 2007 1:20:27 PM org.apache.coyote.http11.Http11Protocol init
          SEVERE: Error initializing endpoint
          java.net.BindException: Address already in use:8080
          ....................
          netstat -nlp 看到后臺java只有一個8015端口,而且有
          127.0.0.1:8080  127.0.0.1:8080 ESTABLISHED的鏈接
          很是奇怪,
          google一下提示是要使用apr
          由于是debian系統所以很容易安裝需要的軟件
          apt-get install libapr1-dev apache2-utils
          可是還是不行,錯誤照常出現。
          重起服務器后一切正常。


          win

          當我下載Tomcat6.0.16并安裝到eclise后,當任意建一個工程后,哪怕只有一個jsp頁面的工程,啟動Tomcat后都會有一個“警告”的提示(對工程與頁面顯示沒有任何影響)。于是刪除工程,只啟動Tomcat服務器時,提示信息:The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ......,是說在產品環境下可以優化工作性能的Tomcat的本地包沒有找到。于是我就把以前所學的有關classpath、path相關的知識全用上設置一大類鍵值對,根本無法解決這個問題。
          經過幾個小時的上網搜索終于找到了解決方法:原來Tomcat從5.5版本后增加了APR技術(Apache Portable Runtime),這是一個用C語言寫成文件包,目的在于提高Tomcat的服務性能,從而使得Tomcat將不僅僅擔任一個容器的功能,而是要成為一個 一般的web服務器(general purpose webserver)。現在是什么都漲,Tomcat的野心也在漲??!
          通過上述描述大家也就明白了,我們只要把那個本地文件下載過來,配置好之后,這些問題就會迎刃而解了,首先要到Tomcat網站上去下載:
          http://tomcat.apache.org/download-native.cgi 找到Native 1.1.13 Source Release zip 這是個源文件,如果你要自己編譯就下這個,如果想使用已編譯好的dll文件就點擊這個鏈接下面的“Here“ 鏈接,找一個版本號最新的,進去可以下載一個tcnative-1.dll文件。
          那么如何配置這個文件呢?簡單一點就是把這個文件扔到windows/system32下面,因為我們已經在path下配置好了這個路徑,系統啟動后就可以找到這個路徑下的文件,如果想放到自己指定的位置,比如話到Tomcat安裝路徑下,那么就要在path中指定好這個路徑,我是這樣做的,首先根據慣例在系統變量中設置CATALINA_HOME變量,然后再把%CATALINA_HOME%\bin加入到path中,然后再把下載的dll文件放到 bin路徑下就一切ok了。當然不做這些工作不會影Tomcat運行,蘿卜白菜各有所愛了。
          本文參考http://www.aygfsteel.com/beansoft/archive/2006/12/22/89577.html

          posted @ 2008-11-13 17:15 smallfa 閱讀(3278) | 評論 (0)編輯 收藏

          webwork相關配置

          https://webwork.dev.java.net/servlets/ProjectDocumentList下載WebWork壓縮包,并將其解壓開來,本文中使用的是webwork-2.1.7版本。
          其中必須要在lib文件夾中加入的jar文件分別為
          webwork-2.1.7.jar
          xwork.jar ———— 包含webwork構建所依賴的xwork類庫
          common-logging.jar ———— 通用日志類庫,webwork使用它來提供透明的日志記錄
          oscore.jar ———— 一個通用功能類庫
          velocity-dep.jar ———— 依賴的Velocity類庫
          ognl.jar ———— webwork中使用的表達式語言(ORGL)
          除webwork-2.1.7.jar以外的幾個jar文件都可以從WebWork壓縮包中的lib\core文件夾下找到
          而如果需要其他的功能(如:文件上傳),則要將lib\core下的相應的jar文件拷貝到WEB-INF\lib目錄

          配置web.xml文件:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
          <web-app>
          <display-name>My WebWork Application</display-name>
          增加有關servlet定義的節點
          <servlet>
          <servlet-name>webwork</servlet-name>
          <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher
          </servlet-class>
          <load-on-startup>1</load-on-startup>
          </servlet>
          將這個servlet映射至某個URL模式
          <servlet-mapping>
          <servlet-name>webwork</servlet-name>
          <url-pattern>*.action</url-pattern>
          </servlet-mapping>
          增加webwork標簽庫的定義節點
          <taglib>
          <taglib-uri>webwork</taglib-uri>
          <taglib-location>/WEB-INF/webwork.tld</taglib-location>
          </taglib>
          </web-app>

          創建xwork.xml配置文件

          <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
          <xwork>
          <include file="webwork-default.xml" />
          <package name="example" extends="webwork-default">
          <action name="hello" class="org.liky.webwork.liky.HelloWorldAction">
          <result name="success" type="dispatcher">index.jsp</result>
          </action>
          </package>
          </xwork>

          posted @ 2008-11-09 00:22 smallfa 閱讀(276) | 評論 (0)編輯 收藏

          圖解MyEclipse配置struts+hibernate+spring+FreeMarker

          這幾天把hibernate和spring好好看了下,再想想struts的一些東西,決定把3個整合一下一起用,表現層用struts+freemarker,業務層用spring,hibernate處理持久層。在struts中,利用委托,將action的處理委托給spring進行,struts只負責頁面邏輯。
          前些日子下了Eclipse 3.2+MyEclipse5.0M2,感覺MyEclipse一些東西還是不錯的,就用它來做個整合。
          首先,建立一個web project:


          然后,給新建立的項目附加上struts的一些文件:


          完成后項目結構如下:

          接著加入hibernate需要的文件:






          完成后項目結構為:

          再加入spring的文件:

          注意下面的選擇:



          完成后可以看到:

          打開那個applicationContext.xml,將

          改為:

          現在還需要做一些修改,才能在運行的時候不報錯,我以前也寫過struts+hibernate的時候,會拋一個錯,之所以是由于hibernate包含的那個xerces.jar,所以現在直接把它給刪掉,沒什么問題。

          在spring和hibernate那,有2個log4j.jar,老版本不好用,所以刪除,換一個新版本。
          刪除,換上,然后,在src下加入一個log4j.properties:

          內容如下:

          這樣log4j就配好了。
          接下來是加入FreeMarker,jsp比不上,個人感覺。
          先下一個freemarker.jar,加到WEB-INF下的lib目錄,然后,打開web.xml,加入如下內容:



          下面來點實戰演習。
          切換到MyEclipse的hibernate視圖。

          打開數據庫連接:


          然后,執行

             
          自動生成幾個文件:

          并且,spring的applicationContext.xml自動加入

          然后,建立ftl頁面,根據前面web.xml配置的freemarker設置,需要建立如下目錄
            
          先把頁面邏輯處理下,打開struts-config.xml,然后進行如下操作



          繼續加




          完成后效果如下:

          下面是3個頁面:



          這里注意下前2行,在freemarker中用struts標簽。
          前面說過action委托給spring做,許要在struts那加入

          然后,action類需要修改下

          下面的setter是為spring準備的。
          struts配置那的action聲明需要修改一下,說明用代理:

          然后在spring的applicationContext.xml加上:

          注意是用name,不是id。
          發布,運行,結果拋了個錯

          還好,問題不大,找到加到WEB-INF/lib下就可以了。
          開始測試

          成功的話:

          否則:

          然后去數據庫一看,郁悶,數據沒進來,試了N久,最后發現spring里要定義個dataSource。原來sessionFactory的定義變為如下:

          ok,一切正常。到這里,就寫完了,只是為說明怎樣用MyEclipse進行快速開發,畢竟平時做項目要的是進度,還要監管質量,有了MyEclipse,確實方便不少。
          http://www.cnblogs.com/zxub/archive/2006/08/03/466682.html

          posted @ 2008-11-07 01:55 smallfa 閱讀(1896) | 評論 (0)編輯 收藏

          MyEclipse 5.5 開發 Spring 整合 Struts, Hibernate 的應用

          第一部分: Struts 開發 6.83MB 22分36秒 http://beansoft.java-cn.org/download/ssh_1_struts.exe

          第二部分: Hibernate + Spring 11.5MB 38分59秒 http://beansoft.java-cn.org/download/ssh_2_hibernate_spring.exe

          第三部分: 自己實現 SpringProxyAction 5.05MB 14分25秒 http://beansoft.java-cn.org/download/ssh_3_struts_proxy_asm.exe

          第四部分: ASM 錯誤解決及用 Spring 的代理實現整合 9.95MB 23分49秒 http://beansoft.java-cn.org/download/ssh_4_spring_struts.exe

          大綱 PDF 下載: http://beansoft.java-cn.org/download/spring_struts_hibernate.pdf 427KB

          代碼下載(不帶類庫): http://beansoft.java-cn.org/download/myssh.rar 45KB

           

          視頻大綱:
          http://www.aygfsteel.com/beansoft/archive/2008/11/04/150877.html#238712

          posted @ 2008-11-06 22:02 smallfa 閱讀(312) | 評論 (0)編輯 收藏

          dwr 配置

          1:下載dwr.jar放在 WebRoot\WEB-INF\lib

          2:頁面
          <%@ page language="java" pageEncoding="UTF-8"%>
                <script type='text/javascript' src='../dwr/engine.js'></script>
                  <script type='text/javascript' src='../dwr/util.js'></script>
                  <script type='text/javascript' src='../dwr/interface/checkuser.js'></script>
                 <script type='text/javascript'>
                      function  check(form)
                    {
                   
                     var id=document.getElementById("id").value;
                     if(id=="new")
                     {
                     regUserChked(form);
                     }
                     else
                     {
                    
                     RegUserChked(form);
                       
                     }
                    }
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                    function regUserChked(form){ 
                    
                       var username= document.getElementById("username").value;
                     
                      
                        if(username=="")
                        {
                      
                        alert("用戶名不能為空!")
                     
                        return false;
                        }
                       
                        checkuser.isExist(username,showData);//showData回調函數  
                        
                         
                     } 
                    
                      function RegUserChked(form){ 
                     
                        var id=document.getElementById("id").value;
                        var username= document.getElementById("username").value;
                        if(username=="")
                        {
                      
                        alert("用戶名不能為空!")
                     
                        return false;
                        }
                      
                          checkuser.IsExistUpdate(username,id,ShowData);  //showData回調函數  
                      }
                    
                    
                    
                    
                    
                    
                    
                    function showData(data){  
                      if(data){  
                        alert('該用戶已被注冊了!');
                      }else{  
                        alert('該用戶未被注冊了!');  
                       }  
                    }  
                   
                     function ShowData(data){  
                      if(data){  
                        alert('該用戶已被注冊了!');
                      }else{  
                        alert('可以更新!');  
                       }  
                    }  
                  </script>
              </head>
              <body>
                  <html:form action="/acctount" onsubmit="javascript:return Juge(this);">
                      <input type="hidden" name="id"  value="<%=id%>">
                      username : <html:text property="username" value="<%=Username %>" onblur="check(this)" />
          <html:errors property="username"/><br/>
                      password : <html:text property="password" value="<%=password %>"/>
          <html:errors property="password"/><br/>

                  <html:submit/><html:cancel/>
                  </html:form>
              </body>
          </html>




          3:dwr.xml配置
                <dwr>

              <allow> 
           
              
           <!-- 直接取操作類  <create creator="new" javascript="checkuser" scope="application">
                <param name="class" value="com.henry.dao.daospring"/>
                 <include method="isExist"/>
              </create>
             -->
            
             <!-- 間接取bean -->
                 <create creator="spring" javascript="checkuser">
                <param name="beanName" value="accountDAO" />
                   <include method="isExist"/>
                   <include method="IsExistUpdate"/>
                 </create>
           </allow> 
          </dwr>

          4:  applicationContext.xml

             <bean id="accountDAO" class="com.henry.dao.AccountDao">
             <property name="dataSource">
               <ref local="dataSource"/>
               </property>
              <property name="sqlMapClient">
              <ref bean="sqlMapClient"/>
              </property>
             
               </bean>
          5:web.xml
             <servlet>
            <servlet-name>dwr-invoker</servlet-name>
            <display-name>DWR Servlet</display-name>
            <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
            <init-param>
               <param-name>debug</param-name>
               <param-value>true</param-value>
            </init-param>
          </servlet>

          <servlet-mapping>
            <servlet-name>dwr-invoker</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
          </servlet-mapping>
           <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>


          6:1)以上dwr通過間接spring-> applicationContext.xml的bean
          <!-- 間接取bean -->
                 <create creator="spring" javascript="checkuser">
                <param name="beanName" value="accountDAO" />
                   <include method="isExist"/>
                   <include method="IsExistUpdate"/>
                 </create>


             2)如果直接取spring-> applicationContext.xml的bean
          <!-- 直接取操作類  <create creator="new" javascript="checkuser" scope="application">
                <param name="class" value="com.henry.dao.daospring"/>
                 <include method="isExist"/>
              </create>
             -->
           
          com.henry.dao.daospring
          :如下
          package com.henry.dao;
          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.List;
          import  com.henry.dto.accountDto;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;
          public class daospring {
              ApplicationContext context=new ClassPathXmlApplicationContext("com/henry/dbxml/applicationContext.xml");
              AccountDao testDAOImpl=(AccountDao)context.getBean("AccountDAO");
              public List getAccountsByName(String username)
              {
                
              
                return  testDAOImpl.getListByName(username);
              }
             
              /*
               * update check
               */
              public boolean IsExistUpdate(String username)
              {
                  accountDto account=new accountDto();
                  List list=this.getAccountsByName(username);
                  if(list.size()==0)
                  {
                      return false;
                  }
                  else
                  {
                      //if(account.getId()==Integer.parseInt(id))
                      //{
                      //    return false;
                         
                      //}
                      //else
                      //{
                          return true;
                      //}
                  }
              }
             
              public String getIdByName(String username,String id)
              {
                  accountDto account=new accountDto();
                  List list=this.getAccountsByName(username);
                  if(list.size()==0)
                  {
                      return null;
                  }
                  else
                  {
                      return   Integer.toString(((accountDto)list.get(0)).getId()) ;
                  }
                 
              }
             
             
             
              public boolean IsExist(String username) { 
                 
                  if(testDAOImpl.isExist(username))
                  {
                  return true;
                  }
                  else
                  {
                      return false;
                  }
                
             }
             
              //new or add   check
              public boolean isExist(String username) { 
                    
                  if(testDAOImpl.isExist(username))
                  {
                  return true;
                  }
                  else
                  {
                      return false;
                  }
                
             }
             
             
              public accountDto getAccountById(String id)
              {
              return  testDAOImpl.getById(id);
              }
            
          }


          7:出現問題struts---->action--->findforward跳轉頁面------該頁面dwr取spring-->applicationContext.xml的bean變成無效

          posted @ 2008-02-28 18:12 smallfa 閱讀(568) | 評論 (0)編輯 收藏

          我javablog

          我javablog

          posted @ 2008-02-27 09:46 smallfa 閱讀(235) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          smallfa
          博客園
          C++博客
          博客生活
          Blogjava
          足球博客
          微博
          Redsaga

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          Ajax

          Blogs

          DB

          java

          Open source

          ORM

          Tools/Help

          vedio Tech

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大悟县| 临泽县| 武强县| 桑植县| 桓台县| 边坝县| 保靖县| 辽阳县| 永兴县| 墨脱县| 昌邑市| 安阳市| 兴安县| 常德市| 蒙山县| 丽江市| 保康县| 泰州市| 奉化市| 宜兰县| 宁南县| 长乐市| 辽宁省| 皮山县| 西贡区| 项城市| 平山县| 阳朔县| 阿鲁科尔沁旗| 高密市| 乌什县| 金山区| 耒阳市| 文化| 潜山县| 张家界市| 民丰县| 滦南县| 苏州市| 乐平市| 南京市|