all gone

          all gone

          2006年5月4日 #

          Ubuntu UTF8環(huán)境下搭建中文LaTeX環(huán)境

          1. 基本包的安裝
          sudo apt-get install tetex-base tetex-bin tetex-extra
          1. CJK包安裝
          sudo apt-get install latex-cjk-chinese
          1. CJK UTF8字體生成
          將下面的code復(fù)制到文件cvtfont.sh中:

          #!/bin/sh
          #
          # Origin By Edward G.J. Lee
          2001.11.25
          # http:
          //www.study-area.org/tips/latex/pdftex.html
          # This code is Public Domain.
          #
          # Enhanced by intron@intron.ac,
          2006.1.9
          # Modified
          for NetBSD by jungle@soforge.com, 2006.1.14
          # Italic support added by robert.zhangle@gmail.com,
          2006.5.19
          #

          if [ $# -ne 3 ]
          then

          cat
          << EOF
          Usage: `basename $
          0` font.ttf <TeX_Internal_Font_Name> <Tex_Font_Name>
          <TeX_Internal_Font_Name>: Used to name *.enc, *.afm, *.pfb, *.tfm & *.map
          <Tex_Font_Name>: Used in TeX source: \\CJKencfamily{UTF8}{Tex_Font_Name}

          An example: `basename $
          0` gbsn00lp.ttf gbsn00lp songpt1

          EOF

          exit
          1
          fi

          if ! which ttf2pt1; then
          echo
          "Please install pkgsrc fonts/ttf2pt1 before you can run me."
          exit
          1
          fi

          if ! which t1asm; then
          echo
          "Please install pkgsrc fonts/t1utils before you can run me."
          exit
          1
          fi

          if ! which extconv; then
          echo
          "Please install pkgsrc chinese/CJK before you can run me."
          exit
          1
          fi


          cat
          <<EOF
          ***************************************************************************
          * Please confirm that current working directory is EMPTY except scripts *
          * and HAS ENOUGH SPACE to contain so many intermediate files. *
          * If it is not empty, this script may DAMAGE INNOCENT FILES!!! *
          ***************************************************************************
          EOF

          read
          -p "Go ahead?[n]" a

          if [ "$a" != "y" ] && [ "$a" != "Y" ]; then
          exit
          0
          fi

          FONTFILENAME
          ="$1"
          FONTNAME
          ="$2"
          FONTTEXNAME
          ="$3"

          #TEXMFHOME
          =`kpsexpand '$TEXMFHOME'`
          TEXMFMAIN
          =`kpsexpand '$TEXMFMAIN'`
          TEXMFHOME
          ='/usr/share/texmf-tetex/'
          TTFONTFILEDIR
          =${TEXMFHOME}/fonts/truetype/chinese/
          ENCDIR
          =${TEXMFHOME}/fonts/enc/dvips/chinese/${FONTNAME}
          AFMDIR
          =${TEXMFHOME}/fonts/afm/chinese/${FONTNAME}
          TFMDIR
          =${TEXMFHOME}/fonts/tfm/chinese/${FONTNAME}
          PFBDIR
          =${TEXMFHOME}/fonts/type1/chinese/${FONTNAME}
          MAPDIR
          =${TEXMFHOME}/fonts/map/dvips/chinese

          UPDMAPCFG
          =${TEXMFHOME}/web2c/updmap.cfg

          if [ ! -f $UPDMAPCFG ]
          then
          SYSUPDMAPCFG
          =`kpsewhich -format 'web2c files' updmap.cfg`
          cp $SYSUPDMAPCFG $UPDMAPCFG
          fi

          CIDXMAP
          =${TEXMFHOME}/dvipdfm/config/cid-x.map

          if [ ! -f $CIDXMAP ]
          then
          touch $CIDXMAP
          fi

          CJKDIR
          =${TEXMFMAIN}/tex/latex/CJK/UTF8

          INSTALLDIRMODE
          ="-m 0755"
          INSTALLMODE
          ="-m 0644"

          FONTFILEBASENAME
          =`basename "$FONTFILENAME"`
          FDNAME
          =c70${FONTTEXNAME}.fd

          #MAPFILE
          =/usr/local/share/ttf2pt1/maps/cugb.map
          PLANENUM
          =255

          # Initialize ${FONTNAME}.map
          echo
          -n "" > ${FONTNAME}.map


          n
          =0

          echo
          "Generating subfonts from plane $n to plane $PLANENUM ..."

          while [ $n -le $PLANENUM ]
          do
          m
          =`printf %02x $n`

          echo
          -n "[$n]"

          SUBFONTNAME
          =${FONTNAME}${m}

          # Generate
          *.t1a *.afm *.enc
          ttf2pt1
          -GAE -pft -OHUBs -W0 -l plane+pid=3,eid=1,0x$m \\
          "$FONTFILENAME" ${SUBFONTNAME}

          # avoid dvips(k)(before v5.
          86) t1part module bug.
          perl
          -pi -e 's/_/Z/g' ${SUBFONTNAME}.t1a ${SUBFONTNAME}.afm

          # Generate
          *.pfb
          t1asm
          -b ${SUBFONTNAME}.t1a > ${SUBFONTNAME}.pfb 2>/dev/null

          # Generate
          *.tfm
          afm2tfm ${FONTNAME}$m.afm ${FONTNAME}$m.tfm
          >/dev/null
          afm2tfm ${FONTNAME}$m.afm
          -s .167 ${FONTNAME}sl$m.tfm >/dev/null

          # Generate ${FONTNAME}.map
          AFMNAME
          =`grep -m 1 -i fontname ${SUBFONTNAME}.afm | cut -d ' ' -f 2`
          echo
          "${FONTNAME}$m ${AFMNAME} <${FONTNAME}$m.pfb" >> ${FONTNAME}.map
          echo
          "${FONTNAME}sl$m ${AFMNAME} \\" .167 SlantFont \\" <${FONTNAME}$m.pfb" \\
          >> ${FONTNAME}.map

          n
          =`expr $n + 1`
          done

          echo

          cat
          > ${FDNAME} << EOF
          % This file is automatically generated by `basename $0`
          \\\\def\\\\fileversion{
          0.0.1}
          \\\\def\\\\filedate{`date
          +%Y/%m/%d`}
          \\\\ProvidesFile{${FDNAME}}[\\\\filedate\\\\space\\\\fileversion]

          \\\\DeclareFontFamily{C70}{${FONTTEXNAME}}{\\\\hyphenchar \\\\font\\\\m@ne}

          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{n}{
          <-> CJK * ${FONTNAME}}{}
          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{n}{
          <-> CJKb * ${FONTNAME}}{\\\\CJKbold}
          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{it}{
          <-> CJK * ${FONTNAME}sl}{}
          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{it}{
          <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}
          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{sl}{
          <-> CJK * ${FONTNAME}sl}{}
          \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{sl}{
          <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}

          \\\\endinput
          EOF


          #exit
          0;

          echo
          echo
          "Installing ..."

          install
          -d $INSTALLDIRMODE $TTFONTFILEDIR $ENCDIR $AFMDIR $TFMDIR $PFBDIR $MAPDIR $CJKDIR

          install $INSTALLMODE $FONTFILENAME $TTFONTFILEDIR

          n
          =0
          while [ $n -le $PLANENUM ]
          do
          m
          =`printf %02x $n`
          echo
          -n "[$n]"

          install $INSTALLMODE ${FONTNAME}${m}.enc $ENCDIR
          install $INSTALLMODE ${FONTNAME}${m}.afm $AFMDIR
          install $INSTALLMODE ${FONTNAME}${m}.tfm $TFMDIR
          install $INSTALLMODE ${FONTNAME}sl${m}.tfm $TFMDIR
          install $INSTALLMODE ${FONTNAME}${m}.pfb $PFBDIR

          n
          =`expr $n + 1`
          done

          echo

          install $INSTALLMODE ${FONTNAME}.map $MAPDIR
          install $INSTALLMODE $FDNAME $CJKDIR

          echo
          >> $UPDMAPCFG
          echo
          "Map ${FONTNAME}.map" >> $UPDMAPCFG

          # update cid
          -x.map

          echo
          "${FONTNAME}@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP
          echo
          "${FONTNAME}sl@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP

          mktexlsr

          #updmap
          -sys
          updmap

          read
          -p "Do you want remove all intermediate files?[n]" a
          if [ "$a" = "y" ] || [ "$a" = "Y" ]; then

          n
          =0
          while [ $n -le $PLANENUM ]
          do
          m
          =`printf %02x $n`
          echo
          -n "[$n]"

          rm
          -f ${FONTNAME}${m}.enc ${FONTNAME}${m}.afm ${FONTNAME}${m}.t1a \\
          ${FONTNAME}${m}.pfb ${FONTNAME}sl${m}.tfm ${FONTNAME}${m}.tfm

          n
          =`expr $n + 1`
          done

          echo

          rm
          -fv $FDNAME ${FONTNAME}.map
          fi

          echo
          echo
          "OK, all done. :-)"
          echo


          根據(jù)自己的需要可以將TEXMFHOME目錄設(shè)置成不同的地方,只要Latex能找到即可
          我將該目錄改為了/usr/share/texmf-tetex,如果相應(yīng)的目錄不存在,則需要自己新建。


          將windows系統(tǒng)中的字體文件拷到腳本所在目錄執(zhí)行腳本即可生成Latex所需字體文件,以simhei.ttf為例:

          sudo ./cvtfont.sh simhei.ttf simhei simhei







          posted @ 2007-05-16 13:34 all gone 閱讀(1126) | 評(píng)論 (0)編輯 收藏

          Struts2 入門

               摘要: 很久沒(méi)有看Java相關(guān)的東西了,這幾天才發(fā)現(xiàn)Struts2 已經(jīng)發(fā)布了,以前就聽(tīng)說(shuō)Struts2就是以前的Webwork2,只是作了少許的改動(dòng)而已,我以前也沒(méi)看過(guò)Webwork,所以趕緊下來(lái)試了一把。Struts2的地址:http://struts.apache.org/2.x在Eclipse中新建了一個(gè)Tomcat工程(如果用WTP插件的話Dynamic Web工程)struts2Test,以下...  閱讀全文

          posted @ 2007-01-08 21:59 all gone 閱讀(8488) | 評(píng)論 (8)編輯 收藏

          Ubuntu下NVIDIA驅(qū)動(dòng)的問(wèn)題

          前幾天按照Ubuntu How-To上的NVIDIA驅(qū)動(dòng)安裝說(shuō)明安裝了8672版的驅(qū)動(dòng),結(jié)果發(fā)現(xiàn)只要退出X-Window,系統(tǒng)就會(huì)沒(méi)有反應(yīng),網(wǎng)上搜了搜,發(fā)現(xiàn)有人也有一樣的情況,按照說(shuō)明重新安裝、重新配置Xorg,問(wèn)題依然沒(méi)有解決,X-Window也起不來(lái)了。

          到NVIDIA網(wǎng)站上下了最新的8774版驅(qū)動(dòng)后,趕緊找找看怎么自己裝,有人已經(jīng)寫好了
          在恢復(fù)模式下:
          需要gcc支持,如果沒(méi)有安裝則:
          apt-get install build-essential gcc
          刪除已經(jīng)安裝的NVIDIA驅(qū)動(dòng):
          apt-get --purge remove linux-restricted-modules-`uname -r` linux-restricted-modules-common nvidia-glx nvidia-settings nvidia-kernel-common
          安裝內(nèi)核headers
          apt-get install linux-headers-`uname -r`
          將下載下來(lái)的NVIDIA-Linux-x86-1.0-8774-pkg1.run解壓縮:
          sh ./NVIDIA-Linux-x86-1.0-8774-pkg1.run --extract-only
          進(jìn)入解壓后的NVIDIA-Linux-x86-1.0-8774-pkg1文件夾,執(zhí)行安裝:
          ./nvidia-installer -n --x-prefix=/usr/lib/xorg/
          最后由于默認(rèn)安裝到了/usr/lib/xorg/lig/xorg,需要將文件拷到對(duì)應(yīng)的目錄下:
          cp --no-dereference /usr/lib/xorg/lib/xorg/libX* /usr/lib/xorg/modules/

          cp /usr/lib/xorg/lib/xorg/modules/drivers/* /usr/lib/xorg/modules/drivers/

          cp --no-dereference /usr/lib/xorg/lib/xorg/modules/extensions/* /usr/lib/xorg/modules/extensions/

          posted @ 2006-09-22 15:42 all gone 閱讀(1050) | 評(píng)論 (0)編輯 收藏

          Qt 4下連接MySQL數(shù)據(jù)庫(kù)

          前天剛裝了個(gè)Qt4for windows,發(fā)現(xiàn)安裝的時(shí)候MySQL等數(shù)據(jù)庫(kù)插件都沒(méi)有安裝,像Qt X11版一樣,都需要自己安裝這些插件。

          在Qt的安裝目錄C:\Qt4.1.2\下,有個(gè)src目錄,進(jìn)入plugins\sqldrivers\mysql,可以看到兩個(gè)文件,main.cpp和mysql.pro,很顯然要用qmake來(lái)完成編譯、生成目標(biāo)。

          編譯前,首先保證依賴的MySQL頭文件和庫(kù)文件正確。首先MySQL安裝目錄下的include中的所有文件拷到qmake時(shí)能找到的目錄下,接著從lib/opt目錄下拷出libmysql.a,其實(shí)lib/opt下只有l(wèi)ibmysql.lib和libmysql.dll,從網(wǎng)上搜了一下找到一個(gè)方法從libmysql.dll生成libmysql.a:

          1 、安裝好MySQL (如果不愿意安裝,找個(gè)libmySQL.dll文件也可以)

          2、下載Pexports工具

          3、轉(zhuǎn)換操作: pexports libmysql.dll > libmysql.def

          4、使用MinGW的 dlltool轉(zhuǎn)換成為libmysql.a文件。dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k

          5、嘗試是否成功:
          將生成的libmysql.a 拷到qmake的lib搜索路徑下后在plugins\sqldrivers\mysql目錄下做:
          qmake -project
          qmake
          make

          如果再出現(xiàn)象mysql_connect@xx (xx是數(shù)字)的錯(cuò)誤提示。就執(zhí)行第6步。

          6、修改libmysql.def文件,給mysql_connect加上@xx,即mysql_connect@xx

          7、重做第4步

          8、然后嘗試第5步,如果還是出現(xiàn)錯(cuò)誤提示。就作第6步。一直到?jīng)]有錯(cuò)誤為止。

          最后C:\Qt4.1.2\plugins\sqldrivers下將會(huì)生成需要的libqsqlmysql.a和qsqlmysql.dll。

          找了一個(gè)測(cè)試文件,通過(guò)。
          #include?<QtSql>?
          #include?<QtGui>?


          bool?createConnection(){?
          QSqlDatabase?db?
          =?QSqlDatabase::addDatabase("QMYSQL");?
          db.setHostName("localhost");?
          db.setDatabaseName("test");?
          db.setUserName("test");?
          db.setPassword("");?

          if(!db.open()){?
          QMessageBox::critical(
          0,?QObject::tr("Database?Error"),?
          ??????????????????????????????db.lastError().text())
          ;?

          return?false
          ;?
          }?

          QSqlQuery?query
          ;?
          //query.exec("insert?into?book?values(?3,?'title',?'author')?");?
          query.exec("select?title?,?author?from?book?");?

          while?(query.next())?{?


          ????QString?title?
          =?query.value(0).toString();?
          ????QString?author?=?query.value(1).toString();?

          QMessageBox::critical(
          0,?title,author);?
          ????
          }?


          return?true
          ;?
          }?



          int?main(int?argc
          ,char**?argv){?

          QApplication?app(argc
          ,?argv);?
          ????if?(!createConnection()){?

          return?
          1;?
          }?
          ????????

          ????return?app.exec()
          ;?


          }?

          posted @ 2006-08-28 20:57 all gone 閱讀(2736) | 評(píng)論 (0)編輯 收藏

          EJB3.0 + Struts小試

               摘要: 一直想做一個(gè) EJB3.0 結(jié)合 Struts 的例子,前天剛好從網(wǎng)上找到了一個(gè)相關(guān)的 Tutorial ,于是小試了一把,雖然只是完成了 Tutorial 上的一小點(diǎn)功能,但是感覺(jué)還是有必要寫下來(lái),免得以后還要再去看別人的Tutorial 。 開(kāi)發(fā)環(huán)境:?? ??? Eclipse3.2 + WTP1.5 , JBoss 4.0.3SP1 , jboss-EJB-3.0_RC...  閱讀全文

          posted @ 2006-08-11 13:52 all gone 閱讀(3069) | 評(píng)論 (0)編輯 收藏

          SSH(Spring + Struts + Hibernate)小試 之三

          SSH(Spring + Struts + Hibernate)小試 之三


          前面通過(guò)PlugIn我們實(shí)現(xiàn)了Spring Context的加載,不過(guò)僅僅加載Context并沒(méi)有什么實(shí)際
          意義,我們還需要修改配置,將Struts Action交給Spring容器進(jìn)行管理。下面將通過(guò)一個(gè)Regsit
          實(shí)例加以說(shuō)明。

          首先準(zhǔn)備好regist.jsp和login.jsp,在regist.jsp中 的form有name,password,password2,email域。

          在struts-config.xml中添加配置:

          <form-bean name="registForm" type="com.lzy.forum.form.RegistForm" />

          <action path="/regist" name="registForm"
          type="org.springframework.web.struts.DelegatingActionProxy"

          validate="true" input="/regist.jsp" scope="request">
          <forward name="failure" path="/regist.jsp" />
          <forward name="success" path="/login.jsp" />
          </action>


          RegistForm,RegistAction按照原來(lái)Struts的方法去寫,我在RegistAction中加入了一個(gè)UserDAO對(duì)象
          userDAO,這個(gè)對(duì)象由Spring注入。

          <bean name="/regist" class="com.lzy.forum.action.RegistAction"
          singleton="false">
          <property name="userDAO">
          <ref local="userDAO" />
          </property>
          </bean>

          基本上SSH的架構(gòu)已經(jīng)完成,經(jīng)確認(rèn)后可以自己測(cè)試一下了。(完)

          posted @ 2006-07-18 16:41 all gone 閱讀(650) | 評(píng)論 (1)編輯 收藏

          SSH(Spring + Struts + Hibernate)小試 之二

          Spring和Struts結(jié)合有幾種方法,我選了最常用的PlugIn方式,在struts-config.xml中加入

          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          ??????<set-property property="contextConfigLocation"
          ?????????? ?value="/WEB-INF/action-servlet.xml" />
          ?</plug-in>

          WEB-INF目錄下的action-servlet.xml就是Spring的配置文件,下面給出的是整個(gè)的action-servlet.xml文件:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<beans>

          //Data Source

          ?<bean id="dataSource"
          ??class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          ??<property name="driverClassName">
          ???<value>com.mysql.jdbc.Driver</value>
          ??</property>
          ??<property name="url">
          ???<value>jdbc:mysql://localhost:3306/forum</value>
          ??</property>
          ??<property name="username">
          ???<value>test</value>
          ??</property>
          ??<property name="password">
          ???<null />
          ??</property>
          ?</bean>

          // For Hibernate
          ?<bean id="sessionFactory"
          ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          ??<property name="dataSource">
          ???<ref local="dataSource" />
          ??</property>
          ??<property name="mappingResources">
          ???<list>
          ????<value>com/lzy/forum/domain/User.hbm.xml</value>
          ????<value>com/lzy/forum/domain/Article.hbm.xml</value>
          ????<value>com/lzy/forum/domain/Board.hbm.xml</value>
          ???</list>
          ??</property>
          ??<property name="hibernateProperties">
          ???<props>
          ????<prop key="hibernate.dialect">
          ?????org.hibernate.dialect.MySQLDialect
          ????</prop>
          ????<prop key="hibernate.show_sql">true</prop>
          ???</props>
          ??</property>
          ?</bean>

          ?<bean id="transactionManager"
          ??class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>

          ?

          // For DAO
          ?<bean id="userDAO"
          ??class="com.lzy.forum.dao.impl.UserDAOHibernate">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>

          ?

          ?<bean id="boardDAO"
          ??class="com.lzy.forum.dao.impl.BoardDAOHibernate">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>

          ?<bean id="articleDAO"
          ??class="com.lzy.forum.dao.impl.ArticleDAOHibernate">
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>

          //For Struts Action

          ?<bean name="/regist" class="com.lzy.forum.action.RegistAction"
          ??singleton="false">
          ??<property name="userDAO">
          ???<ref local="userDAO" />
          ??</property>

          ?</bean>


          ?<bean name="/login" class="com.lzy.forum.action.LoginAction"
          ??singleton="false">
          ??<property name="userDAO">
          ???<ref local="userDAO" />
          ??</property>

          ?</bean>

          ?<bean name="/boardManage"
          ??class="com.lzy.forum.action.BoardManageAction" singleton="false">
          ??<property name="userDAO">
          ???<ref local="userDAO" />
          ??</property>
          ??<property name="boardDAO">
          ???<ref local="boardDAO" />
          ??</property>

          ?</bean>

          ?<bean name="/boardNavigate"
          ??class="com.lzy.forum.action.BoardNavigateAction" singleton="false">
          ??<property name="boardDAO">
          ???<ref local="boardDAO" />
          ??</property>

          ?</bean>

          ?<bean name="/boardDisplay"
          ??class="com.lzy.forum.action.BoardDisplayAction" singleton="false">
          ??<property name="boardDAO">
          ???<ref local="boardDAO" />
          ??</property>

          ?</bean>

          ?<bean name="/articleManage"
          ??class="com.lzy.forum.action.ArticleManageAction" singleton="false">
          ??<property name="userDAO">
          ???<ref local="userDAO" />
          ??</property>
          ??<property name="boardDAO">
          ???<ref local="boardDAO" />
          ??</property>
          ??<property name="articleDAO">
          ???<ref local="articleDAO" />
          ??</property>


          ?</bean>


          </beans>

          經(jīng)過(guò)這樣的配置之后,Hibernate事務(wù)交由Spring管理,sessionFactory從Spring容器獲得。下面通過(guò)其中的一個(gè)DAO實(shí)例來(lái)看看這樣做帶來(lái)的方便。


          //BoardDAO.java

          package com.lzy.forum.dao;

          import java.util.ArrayList;

          import com.lzy.forum.domain.Board;

          public interface BoardDAO {
          ?
          ?public boolean isBoardExist(String name);
          ?
          ?public void addBoard(Board board);
          ?
          ?public void deleteBoard(Board board);
          ?
          ?public Board loadBoard(int id);
          ?
          ?public Board loadBoard(String name);
          ?
          ?public Board loadBoardWithArticles(int id);
          ?
          ?public ArrayList getRootBoardsList();
          ?
          ?
          ?
          }


          //BoardDAOHibernate.java

          package com.lzy.forum.dao.impl;

          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.ListIterator;
          import java.util.Set;

          import org.hibernate.Hibernate;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          import com.lzy.forum.dao.BoardDAO;
          import com.lzy.forum.domain.Board;

          public class BoardDAOHibernate extends HibernateDaoSupport implements BoardDAO {

          ?public void deleteBoard(Board board) {
          ??// TODO Auto-generated method stub
          ??this.getHibernateTemplate().delete(board);
          ?}

          ?public void addBoard(Board board) {
          ??// TODO Auto-generated method stub
          ??this.getHibernateTemplate().saveOrUpdate(board);

          ?}

          ?public boolean isBoardExist(String name) {
          ??// TODO Auto-generated method stub
          ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board where name = ? ", new Object[] { name });
          ??if (list.size() > 0) {
          ???// System.out.println("find it");
          ???return true;
          ??}
          ??return false;
          ?}

          ?public Board loadBoard(int id) {
          ??// TODO Auto-generated method stub
          ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board where id = ? ", new Object[] { id });

          ??Board b = null;
          ??if (list.size() > 0) {
          ???b = (Board) list.get(0);
          ??}

          ??return b;
          ?}

          ?public Board loadBoard(String name) {
          ??// TODO Auto-generated method stub
          ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board where name = ? ", new Object[] { name });

          ??Board b = null;
          ??if (list.size() > 0) {
          ???b = (Board) list.get(0);
          ??}

          ??return b;
          ?}

          ?public ArrayList getRootBoardsList() {
          ??// TODO Auto-generated method stub
          ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board b left join fetch b.ChildBoards where b.Parent = null order by b.id");
          ??System.out.println(list.size() + " root boards found ");
          ??

          ??ListIterator index = list.listIterator();
          ??while (index.hasNext()) {

          ???Board s = (Board) index.next();
          ???//this.getSession(true);
          ???//Hibernate.initialize(s.getChildBoards());
          ???///*
          ??? Set children? = (Set) s.getChildBoards();
          ??? Iterator it = children.iterator();
          ???
          ??? while(it.hasNext()){
          ??? Board b = (Board)it.next();
          ??? //Hibernate.initialize(b);
          ??? System.out.println(b.getName());
          ??? }
          ??? //*/

          ???//System.out.println(children.size() + "child(ren) found ");
          ???//s.setChildBoards(s.getChildBoards());
          ??}

          ??return list;
          ?}

          ?public Board loadBoardWithArticles(int id) {
          ??// TODO Auto-generated method stub
          ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });

          ??Board b = null;
          ??if (list.size() > 0) {
          ???b = (Board) list.get(0);
          ??}

          ??return b;

          ?}


          }


          BoardDAOHibernate繼承 HibernateDaoSupport后,通過(guò)getHibernateTemplate()得到一個(gè)HibernateTemplate實(shí)例,然后執(zhí)行CRUD操作,非常簡(jiǎn)單。需要注意的是,由于執(zhí)行一次CRUD操作后,Hibernate session關(guān)閉,如果有使用延遲加載策略的對(duì)象沒(méi)有加載,在后面的Web層很容易出現(xiàn)如下錯(cuò)誤:
          failed to lazily initialize a collection of role
          從網(wǎng)上搜到的解決方法是Open Session In View,
          <filter>
          ???? <filter-name>hibernateFilter</filter-name>
          ???? <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
          ???? </filter-class>

          ???? <!-- singleSession默認(rèn)為true,若設(shè)為false則等于沒(méi)用OpenSessionInView -->
          ??? <init-param>
          ?????? <param-name>singleSession</param-name>
          ?????? <param-value>true</param-value>
          ??? </init-param>
          ? </filter>

          ?? <filter-mapping>
          ???? <filter-name>hibernateFilter</filter-name>
          ???? <url-pattern>*.do</url-pattern>
          ?? </filter-mapping>
          我試了試,還是有一些問(wèn)題,所以后來(lái)還是放棄了這種方法,所有在Web層中需要的對(duì)象都必須在Business層中加載完成。如下面的代碼所示:

          ArrayList list = (ArrayList) this.getHibernateTemplate().find(
          ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });


          這樣Hibernate和Spring的結(jié)合也算完成了。其他的一些DAO類和實(shí)現(xiàn)代碼我沒(méi)有給出,但是大同小異,和Board的實(shí)現(xiàn)類似。


          最后將是Struts 和Spring的結(jié)合,將在下一篇給出。(未完待續(xù))





          posted @ 2006-07-18 16:09 all gone 閱讀(953) | 評(píng)論 (0)編輯 收藏

          SSH(Spring + Struts + Hibernate)小試 之一

          之前對(duì)Spring Struts Hibernate都稍有了解,Spring的IOC給我留下了很深的印象,容器管理的對(duì)象生成
          方法極大地簡(jiǎn)化了程序邏輯,Spring也提供了用于Web的Spring MVC 框架,由于我感覺(jué)其易用性還是不及
          Struts,所以我還是選擇Struts作為前端WEB框架,Hibernate我一直沒(méi)有在Web應(yīng)用中試過(guò),這次當(dāng)然不會(huì)
          錯(cuò)過(guò)機(jī)會(huì)了。


          開(kāi)發(fā)環(huán)境的塔建我就不多說(shuō)了,具體可以參考我以前的幾篇日志。

          在Eclipse中新建一個(gè)動(dòng)態(tài)Web工程,將Struts 、Spring、Hibernate需要的jar都添加到WEB-INF/lib目錄下,
          將Struts標(biāo)簽所需的tld文件、struts-config.xml文件(可以由StrutsIDE生成)添加到WEB-INF下,另外在
          此目錄下添加一個(gè)Spring的配置文件applicationContext.xml。


          我參考的例子是夏昕的《深入淺出Hibernate》上的第6章,很好的一個(gè)論壇示例。

          首先按照書上的ER模型,在數(shù)據(jù)庫(kù)(MySQL)中建立相應(yīng)的數(shù)據(jù)庫(kù)。


          create database forum;

          use forum;

          create table user(
          ?id int not null auto_increment primary key,
          ?name varchar(50),
          ?pwd varchar(50),
          ?email varchar(50)

          )type=innodb;


          create table board(
          ?id int not null auto_increment primary key,?
          ?parent_id int,
          ?create_by int not null,
          ?name varchar(50) not null,
          ?remark varchar(255),
          ?create_time datetime,

          ?index(parent_id),
          ?index(create_by),

          ?foreign key(parent_id) references board(id) on delete cascade,
          ?foreign key(create_by) references user(id) on delete no action
          ?
          )type=innodb;


          create table article(
          ?id int not null auto_increment primary key,?
          ?parent_id int ,
          ?board_id int not null,
          ?article_type int not null,
          ?title varchar(255),
          ?body text,
          ?create_by int not null,

          ?create_time datetime,
          ?hits int unsigned,
          ?bytes int unsigned,
          ?last_update_by int not null,
          ?last_update_time datetime,

          ?index(parent_id),
          ?index(board_id),
          ?index(create_by),
          ?index(last_update_by),

          ?foreign key(parent_id) references article(id) on delete no action,
          ?foreign key(board_id) references board(id) on delete cascade,
          ?foreign key(create_by) references user(id) on delete no action,
          ?foreign key(last_update_by) references user(id) on delete no action
          ?
          )type=innodb;

          之后,我選擇了用Hibernate Sychonizer來(lái)生成映射文件和實(shí)體類,然后對(duì)生成的類進(jìn)行修改(刪掉了生成的Base類),
          實(shí)際上Hibernate Sychonizer生成的映射文件也有錯(cuò)誤,需要修改,我也是后來(lái)在使用中發(fā)現(xiàn)的。

          //User.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          ?"-//Hibernate/Hibernate Mapping DTD//EN"
          ?"
          http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

          <hibernate-mapping package="com.lzy.forum.domain">
          ?<class
          ??name="User"
          ??table="user"
          ?>

          ??<id
          ???name="Id"
          ???type="integer"
          ???column="id"
          ??>
          ???<generator class="native"/>
          ??</id>

          ??<property
          ???name="Name"
          ???column="name"
          ???type="string"
          ???not-null="false"
          ???length="50"
          ??/>
          ??<property
          ???name="Pwd"
          ???column="pwd"
          ???type="string"
          ???not-null="false"
          ???length="50"
          ??/>
          ??<property
          ???name="Email"
          ???column="email"
          ???type="string"
          ???not-null="false"
          ???length="50"
          ??/>
          ?

          ??<set name="ArticlesByLastUpdateBy" inverse="true" lazy="true">
          ???<key column="last_update_by"/>
          ???<one-to-many class="Article"/>
          ??</set>

          ??<set name="ArticlesByCreateBy" inverse="true" lazy="true">
          ???<key column="create_by"/>這里的create_by是后來(lái)修改的,Hibernate Sychonizer生成的有錯(cuò),后面有幾處同樣的錯(cuò)誤】
          ???<one-to-many class="Article"/>
          ??</set>

          ??<set name="Boards" inverse="true" lazy="true">
          ???<key column="create_by"/>【這里的create_by是后來(lái)修改的】

          ???<one-to-many class="Board"/>
          ??</set>


          ?</class>?
          </hibernate-mapping>

          //User.java
          package com.lzy.forum.domain;


          public class User{
          ?private static final long serialVersionUID = 1L;

          //? primary key
          ?private java.lang.Integer id;

          ?// fields
          ?private java.lang.String name;
          ?private java.lang.String pwd;
          ?private java.lang.String email;

          ?// collections
          ?private java.util.Set<Article> articlesByLastUpdateBy;
          ?private java.util.Set<Article> articlesByCreateBy;
          ?private java.util.Set<Board> boards;
          ?
          ?
          ?public java.util.Set<Article> getArticlesByCreateBy() {
          ??return articlesByCreateBy;
          ?}
          ?public void setArticlesByCreateBy(java.util.Set<Article> articlesByCreateBy) {
          ??this.articlesByCreateBy = articlesByCreateBy;
          ?}
          ?public java.util.Set<Article> getArticlesByLastUpdateBy() {
          ??return articlesByLastUpdateBy;
          ?}
          ?public void setArticlesByLastUpdateBy(
          ???java.util.Set<Article> articlesByLastUpdateBy) {
          ??this.articlesByLastUpdateBy = articlesByLastUpdateBy;
          ?}
          ?public java.util.Set<Board> getBoards() {
          ??return boards;
          ?}
          ?public void setBoards(java.util.Set<Board> boards) {
          ??this.boards = boards;
          ?}
          ?public java.lang.String getEmail() {
          ??return email;
          ?}
          ?public void setEmail(java.lang.String email) {
          ??this.email = email;
          ?}
          ?public java.lang.Integer getId() {
          ??return id;
          ?}
          ?public void setId(java.lang.Integer id) {
          ??this.id = id;
          ?}
          ?public java.lang.String getName() {
          ??return name;
          ?}
          ?public void setName(java.lang.String name) {
          ??this.name = name;
          ?}
          ?public java.lang.String getPwd() {
          ??return pwd;
          ?}
          ?public void setPwd(java.lang.String pwd) {
          ??this.pwd = pwd;
          ?}


          }

          //Board.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          ?"-//Hibernate/Hibernate Mapping DTD//EN"
          ?"
          http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

          <hibernate-mapping package="com.lzy.forum.domain">
          ?<class
          ??name="Board"
          ??table="board"
          ?>
          ???<meta attribute="sync-DAO">false</meta>
          ??<id
          ???name="Id"
          ???type="integer"
          ???column="id"
          ??>
          ???<generator class="native"/>
          ??</id>

          ??<property
          ???name="Name"
          ???column="name"
          ???type="string"
          ???not-null="true"
          ???length="50"
          ??/>
          ??<property
          ???name="Remark"
          ???column="remark"
          ???type="string"
          ???not-null="false"
          ???length="255"
          ??/>
          ??<property
          ???name="CreateTime"
          ???column="create_time"
          ???type="timestamp"
          ???not-null="false"
          ???length="19"
          ??/>
          ??<many-to-one
          ???name="CreateBy"
          ???column="create_by"
          ???class="User"
          ???not-null="true"
          ??>
          ??</many-to-one>
          ??<many-to-one
          ???name="Parent"
          ???column="parent_id"
          ???class="Board"???
          ???not-null="false"
          ???lazy="false">
          ??</many-to-one>
          ?

          ??<set name="Articles" inverse="true" lazy="true" order-by="id">
          ???<key column="board_id"/>【這里的board_id是后來(lái)修改的】
          ???<one-to-many class="Article"/>
          ??</set>

          ??<set name="ChildBoards" inverse="true"? lazy="true" order-by="id">
          ???<key column="parent_id"/>這里的parent_id是后來(lái)修改的】
          ???<one-to-many class="Board"/>
          ??</set>


          ?</class>?
          </hibernate-mapping>

          //Board.java
          package com.lzy.forum.domain;

          ?


          public class Board? {
          ?private static final long serialVersionUID = 1L;

          //? primary key
          ?private java.lang.Integer id;

          ?// fields
          ?private java.lang.String name;
          ?private java.lang.String remark;
          ?private java.util.Date createTime;

          ?// many to one
          ?private com.lzy.forum.domain.User createBy;
          ?private com.lzy.forum.domain.Board parent;

          ?// collections
          ?private java.util.Set<com.lzy.forum.domain.Article> articles;
          ?private java.util.Set<com.lzy.forum.domain.Board> childBoards;
          ?
          ?
          ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
          ??return articles;
          ?}
          ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
          ??this.articles = articles;
          ?}
          ?public java.util.Set<com.lzy.forum.domain.Board> getChildBoards() {
          ??return childBoards;
          ?}
          ?public void setChildBoards(java.util.Set<com.lzy.forum.domain.Board> childBoards) {
          ??this.childBoards = childBoards;
          ?}
          ?public com.lzy.forum.domain.User getCreateBy() {
          ??return createBy;
          ?}
          ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
          ??this.createBy = createBy;
          ?}
          ?public java.util.Date getCreateTime() {
          ??return createTime;
          ?}
          ?public void setCreateTime(java.util.Date createTime) {
          ??this.createTime = createTime;
          ?}
          ?public java.lang.Integer getId() {
          ??return id;
          ?}
          ?public void setId(java.lang.Integer id) {
          ??this.id = id;
          ?}
          ?public java.lang.String getName() {
          ??return name;
          ?}
          ?public void setName(java.lang.String name) {
          ??this.name = name;
          ?}
          ?public com.lzy.forum.domain.Board getParent() {
          ??return parent;
          ?}
          ?public void setParent(com.lzy.forum.domain.Board parent) {
          ??this.parent = parent;
          ?}
          ?public java.lang.String getRemark() {
          ??return remark;
          ?}
          ?public void setRemark(java.lang.String remark) {
          ??this.remark = remark;
          ?}


          }

          //Article.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          ?"-//Hibernate/Hibernate Mapping DTD//EN"
          ?"
          http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

          <hibernate-mapping package="com.lzy.forum.domain">
          ?<class
          ??name="Article"
          ??table="article"
          ?>
          ??<meta attribute="sync-DAO">false</meta>
          ??<id
          ???name="Id"
          ???type="integer"
          ???column="id"
          ??>
          ???<generator class="native"/>
          ??</id>

          ??<property
          ???name="ArticleType"
          ???column="article_type"
          ???type="integer"
          ???not-null="true"
          ???length="11"
          ??/>
          ??<property
          ???name="Title"
          ???column="title"
          ???type="string"
          ???not-null="false"
          ???length="255"
          ??/>
          ??<property
          ???name="Body"
          ???column="body"
          ???type="string"
          ???not-null="false"
          ??/>
          ??<property
          ???name="Hits"
          ???column="hits"
          ???type="integer"
          ???not-null="false"
          ???length="10"
          ??/>
          ??<property
          ???name="Bytes"
          ???column="bytes"
          ???type="integer"
          ???not-null="false"
          ???length="10"
          ??/>
          ??<property
          ???name="CreateTime"
          ???column="create_time"
          ???type="timestamp"
          ???not-null="false"
          ???length="19"
          ??/>
          ??<property
          ???name="LastUpdateTime"
          ???column="last_update_time"
          ???type="timestamp"
          ???not-null="false"
          ???length="19"
          ??/>
          ??<many-to-one
          ???name="LastUpdateBy"
          ???column="last_update_by"
          ???class="User"
          ???not-null="true"
          ??>
          ??</many-to-one>
          ??<many-to-one
          ???name="CreateBy"
          ???column="create_by"
          ???class="User"
          ???not-null="true"
          ??>
          ??</many-to-one>
          ??<many-to-one
          ???name="Parent"
          ???column="parent_id"
          ???class="Article"
          ???not-null="false"
          ??>
          ??</many-to-one>
          ??<many-to-one
          ???name="Board"
          ???column="board_id"
          ???class="Board"
          ???not-null="true"
          ??>
          ??</many-to-one>
          ?

          ??<set name="Articles" inverse="true" lazy="false" order-by="id">
          ???<key column="parent_id"/>【這里的parent_id是后來(lái)修改的】
          ???<one-to-many class="Article"/>
          ??</set>


          ?</class>?
          </hibernate-mapping>



          //Article.java
          package com.lzy.forum.domain;

          import java.util.Date;

          ?


          public class Article? {
          ?private static final long serialVersionUID = 1L;
          ?// primary key
          ?private java.lang.Integer id;

          ?// fields
          ?private java.lang.Integer articleType;
          ?private java.lang.String title;
          ?private java.lang.String body;
          ?private java.lang.Integer hits;
          ?private java.lang.Integer bytes;
          ?private java.util.Date lastUpdateTime;
          ?private java.util.Date createTime;
          ?

          ?// many to one
          ?private com.lzy.forum.domain.User lastUpdateBy;
          ?private com.lzy.forum.domain.User createBy;
          ?private com.lzy.forum.domain.Article parent;
          ?private com.lzy.forum.domain.Board board;

          ?// collections
          ?private java.util.Set<com.lzy.forum.domain.Article> articles;

          ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
          ??return articles;
          ?}

          ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
          ??this.articles = articles;
          ?}

          ?public java.lang.Integer getArticleType() {
          ??return articleType;
          ?}

          ?public void setArticleType(java.lang.Integer articleType) {
          ??this.articleType = articleType;
          ?}

          ?public com.lzy.forum.domain.Board getBoard() {
          ??return board;
          ?}

          ?public void setBoard(com.lzy.forum.domain.Board board) {
          ??this.board = board;
          ?}

          ?public java.lang.String getBody() {
          ??return body;
          ?}

          ?public void setBody(java.lang.String body) {
          ??this.body = body;
          ?}

          ?public java.lang.Integer getBytes() {
          ??return bytes;
          ?}

          ?public void setBytes(java.lang.Integer bytes) {
          ??this.bytes = bytes;
          ?}

          ?public com.lzy.forum.domain.User getCreateBy() {
          ??return createBy;
          ?}

          ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
          ??this.createBy = createBy;
          ?}

          ?public java.lang.Integer getHits() {
          ??return hits;
          ?}

          ?public void setHits(java.lang.Integer hits) {
          ??this.hits = hits;
          ?}

          ?public java.lang.Integer getId() {
          ??return id;
          ?}

          ?public void setId(java.lang.Integer id) {
          ??this.id = id;
          ?}

          ?public com.lzy.forum.domain.User getLastUpdateBy() {
          ??return lastUpdateBy;
          ?}

          ?public void setLastUpdateBy(com.lzy.forum.domain.User lastUpdateBy) {
          ??this.lastUpdateBy = lastUpdateBy;
          ?}

          ?public java.util.Date getLastUpdateTime() {
          ??return lastUpdateTime;
          ?}

          ?public void setLastUpdateTime(java.util.Date lastUpdateTime) {
          ??this.lastUpdateTime = lastUpdateTime;
          ?}

          ?public com.lzy.forum.domain.Article getParent() {
          ??return parent;
          ?}

          ?public void setParent(com.lzy.forum.domain.Article parent) {
          ??this.parent = parent;
          ?}

          ?public java.lang.String getTitle() {
          ??return title;
          ?}

          ?public void setTitle(java.lang.String title) {
          ??this.title = title;
          ?}
          ?public java.util.Date getCreateTime(){
          ??return createTime;
          ?}

          ?public void setCreateTime(java.util.Date createTime) {
          ??// TODO Auto-generated method stub
          ??this.createTime = createTime;
          ?}
          ?

          }

          接下來(lái)將會(huì)在web中加入Spring支持和為實(shí)體類提供DAO支持。(未完待續(xù))

          posted @ 2006-07-18 09:54 all gone 閱讀(1788) | 評(píng)論 (2)編輯 收藏

          Eclipse + CDT + MinGW 下編寫QT程序


          環(huán)境:
          (1)安裝Eclipse + CDT + MinGW
          (2)安裝QT for Windows
          (3)安裝QT plugin for Eclipse :org.eclipse.qt-1.0.2.zip,在Preference里設(shè)好相關(guān)路徑。

          新建一個(gè) QT project,將hello。cpp復(fù)制到工程中:
          #include <QApplication>
          #include <QPushButton>

          int main(int argc, char *argv[]){
          ?
          ?QApplication app(argc, argv);
          ?
          ?QPushButton hello("Hello world!");
          ?
          ?hello.resize(100, 30);
          ?hello.show();
          ?
          ?return app.exec();
          }

          build后生成Makefile,新建兩個(gè)Make Target:all,clean
          Make all 后發(fā)現(xiàn)找不到libQtCored4.a等文件,在QT的lib目錄下找到相應(yīng)的libQtCore4.a,復(fù)制后重命名為libQtCored4.a,
          其他庫(kù)文件類似,最后編譯通過(guò),運(yùn)行后出現(xiàn)帶hello按鈕的窗口。

          ?

          posted @ 2006-06-16 19:45 all gone 閱讀(1183) | 評(píng)論 (0)編輯 收藏

          Eclipse + CDT + MinGW 下編寫OpenGL程序


          Eclipse + CDT + MinGW環(huán)境的搭建比較簡(jiǎn)單,由于機(jī)器內(nèi)存不夠大,我在preference里將C++的indexer都置為NO INDEXER。
          安裝MinGW后可以看到,在Include和Lib目錄下有了與OpenGL相關(guān)的頭文件和靜態(tài)庫(kù)。為了使用GLUT,我將glut.h放到了相應(yīng)的
          GL目錄下,看到Lib目錄下有l(wèi)ibglut.a庫(kù)文件,我沒(méi)有將glut。lib放進(jìn)去(后來(lái)發(fā)現(xiàn)libglut。a好像在windows不可用)。

          新建一個(gè)Standtart Make C++ project,將原來(lái)可運(yùn)行的OpenGL程序復(fù)制過(guò)來(lái),寫好Makefile,結(jié)果編譯的時(shí)候還是出現(xiàn)錯(cuò)誤。
          還好找到了這個(gè)非常有用的網(wǎng)頁(yè):http://www.mingw.org/MinGWiki/index.php/Glut
          按照上面列出的錯(cuò)誤,我在每個(gè)#include<GL/glut.h>前都加上#define _STDCALL_SUPPORTED,然后又將glut32。lib、
          opengl32.lib、glu32.lib都放到當(dāng)前的工程目錄下,用”glut32。lib opengl32.lib glu32.lib“ 代替原來(lái)的 ”-lglut -lopengl32 -lglu32",
          最后終于編譯通過(guò)。

          ?

          posted @ 2006-06-16 19:33 all gone 閱讀(1185) | 評(píng)論 (0)編輯 收藏

          EJB 3.0 學(xué)習(xí)筆記——Entity Bean

               摘要: 在EJB 3.0 學(xué)習(xí)筆記——準(zhǔn)備工作中只是簡(jiǎn)單的搭好了EJB3.0開(kāi)發(fā)的基本環(huán)境,之 后就可以開(kāi)發(fā)最簡(jiǎn)單的Session Bean了,我感興趣的還是Entity Bean,所以接下來(lái) 我想先試驗(yàn)一下Entity Bean。?一、在JBoss中配置好Data Source我使用的是MySQL數(shù)據(jù)庫(kù),所以首先將MySQL的JDBC驅(qū)動(dòng)復(fù)制到j(luò)boss-4.0.3SP1\server\al...  閱讀全文

          posted @ 2006-05-20 22:38 all gone 閱讀(3383) | 評(píng)論 (4)編輯 收藏

          JavaScript和Applet互相調(diào)用

          Java Script 調(diào)用 java 可以在網(wǎng)頁(yè)里使用

          <script language=javascript>

          ?????? document.applet_name.method_name();

          </script>

          可以對(duì) applet 進(jìn)行控制,也可以從 applet 返回值。

          ?

          ?

          Java 調(diào)用 Java Script

          需要導(dǎo)入 netscape.javascript.jsobject 這個(gè)類 (jre/lib/plugin.jar)

          比如:

          JSObject window=JSObject.getWindow(this);

          JSObject window=(JSObject)window.getMember("document");

          來(lái)獲取對(duì)當(dāng)前窗口的控制權(quán)。

          ?

          當(dāng)點(diǎn)擊鏈接 MakeCall 時(shí),會(huì)觸發(fā) Java Script 函數(shù)

          ?

          function makeCall(s){

          ? window.document.ctiApplet.testJavascript(s);

          ? alert("call maked!");

          ?}

          ?

          在這個(gè) Java Script 函數(shù)中, ctiApplet 是一個(gè) Applet ,這樣完成了 java script 調(diào)用

          Applet 。

          以下是 ctiApplet 中的 testJavascript 函數(shù)和運(yùn)行結(jié)果,其中又調(diào)用了 Java Script 。
          public void testJavascript(String msg){

          ??????

          ?

          ?????? try {

          ????????????? // create JSObject

          ?

          ?????? ??? ?????? JSObject.getWindow (this).eval ("javascript:alert('Java Script in Applet!')") ;

          ?????? }

          ?????? catch (Exception ex) {

          ????????????? // Error on create JSObject

          ?????? ??? ?????? showStatus( "Error call javascript err=" + ex );

          ?????? }

          ?

          ?????? System.out.println(msg);

          }

          ?

          ?

          ?

          posted @ 2006-05-04 09:41 all gone 閱讀(452) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 中宁县| 襄城县| 田阳县| 吴川市| 茶陵县| 同德县| 三台县| 远安县| 来凤县| 壤塘县| 威远县| 宁都县| 方山县| 靖远县| 广安市| 十堰市| 巢湖市| 托克逊县| 合山市| 大城县| 荆门市| 汉阴县| 呼和浩特市| 枞阳县| 辰溪县| 内丘县| 泰来县| 安仁县| 英山县| 德兴市| 三台县| 崇阳县| 翁源县| 新昌县| 巢湖市| 察哈| 神木县| 天全县| 彰武县| 金平| 连城县|