1 目的
規(guī)范
數(shù)據(jù)庫設(shè)計。
2 概述
從
數(shù)據(jù)庫的
設(shè)計原則
設(shè)計文檔幾方面論述
數(shù)據(jù)庫設(shè)計的規(guī)范思想及命名規(guī)則。
3
數(shù)據(jù)庫應(yīng)用結(jié)構(gòu)
根據(jù)對一般
業(yè)務(wù)系統(tǒng)的分析,將
數(shù)據(jù)庫和程序系統(tǒng)
統(tǒng)一進行整體描述,展示
數(shù)據(jù)庫的
表之間以及與程序模塊間的關(guān)系。
3.1 數(shù)據(jù)表和程序模塊的分類
根據(jù)“處理特點”,將數(shù)據(jù)表和程序模塊進行分類如下:
數(shù)據(jù)表分類:業(yè)務(wù)數(shù)據(jù)表、基本編碼表、輔助編碼表、系統(tǒng)信息表、累計數(shù)據(jù)表、結(jié)
算數(shù)據(jù)表、決策數(shù)據(jù)表。
程序模塊分類:初始化、業(yè)務(wù)處理、完整性檢測與修正、結(jié)算處理、統(tǒng)計處理。
3.1.1 數(shù)據(jù)表分類說明
業(yè)務(wù)數(shù)據(jù)表:記錄業(yè)務(wù)發(fā)生的過程和結(jié)果。如,合同、出倉單、申請單、憑證。
基本編碼表:描述業(yè)務(wù)實體的基本信息和編碼。如,產(chǎn)品、客戶、供應(yīng)商、雇員。
輔助編碼表:描述屬性的列表值。如,合同類型、職稱、民族、付款方式。
系統(tǒng)信息表:存放與系統(tǒng)操作、業(yè)務(wù)控制有關(guān)的參數(shù)。如,用戶信息、權(quán)限、用戶配
置信息、
成本核算方式。
累計數(shù)據(jù)表:存放業(yè)務(wù)的當前值和累計值。如,當前
庫存、當前存款、累計銷售、累
計支出、應(yīng)收賬款。
結(jié)算數(shù)據(jù)表:存放各個時期末的結(jié)存數(shù)。如,月末庫存、月末銀行存款、應(yīng)收賬款月
結(jié)。
決策數(shù)據(jù)表:存放各個時期內(nèi)發(fā)生的統(tǒng)計值。如,月銷售統(tǒng)計、月回款統(tǒng)計、出入庫
統(tǒng)計。
3.1.2 程序模塊分類說明
初始化:系統(tǒng)運行前對系統(tǒng)進行數(shù)據(jù)的初始化。如,庫存初始化。
業(yè)務(wù)處理:業(yè)務(wù)過程的控制和結(jié)果記錄。如,合同錄入、費用審批、出入庫。
完整性檢測與修正:對累計數(shù)據(jù)表進行檢查并自動修正。如對當前庫存、當前存款、
累計銷售的檢查和重新
計算。
結(jié)算處理:計算并記錄各個時期末的結(jié)存數(shù)。庫存月結(jié)、應(yīng)收賬款月結(jié)。
統(tǒng)計處理:計算并記錄各個時期內(nèi)發(fā)生的統(tǒng)計數(shù)。如,統(tǒng)計月銷售、統(tǒng)計月回款、統(tǒng)
計出入庫。
3.2 數(shù)據(jù)表間的關(guān)系
業(yè)務(wù)數(shù)據(jù)表<-->基本編碼表 主-外鍵關(guān)系。如,合同表<-->客戶編碼表;
業(yè)務(wù)數(shù)據(jù)表<-->輔助編碼表 主-外鍵關(guān)系。如,合同表<-->付款方式;
業(yè)務(wù)數(shù)據(jù)表、累計數(shù)據(jù)表、結(jié)算數(shù)據(jù)表:累計數(shù)據(jù)表=結(jié)算數(shù)據(jù)表(上期末) + 業(yè)務(wù)數(shù)
據(jù)表(本期內(nèi)發(fā)生)。如當前庫存=上月末庫存數(shù)+(本月入庫數(shù)-本月出庫數(shù));
決策數(shù)據(jù)表<-->業(yè)務(wù)數(shù)據(jù)表 決策數(shù)據(jù)表的數(shù)據(jù)是由業(yè)務(wù)數(shù)據(jù)表中數(shù)據(jù)導(dǎo)出(統(tǒng)計)的;
3.3 數(shù)據(jù)表與程序模塊間的關(guān)系
由一個例子(倉庫管理)來說明數(shù)據(jù)表與程序模塊之間的關(guān)系:
. 系統(tǒng)使用前,由初始化模塊對庫存數(shù)(累計數(shù)據(jù)表)和上月末庫存數(shù)(結(jié)存數(shù)據(jù)表)進
行初始化;
. 當有入庫業(yè)務(wù)發(fā)生時,由入庫模塊(業(yè)務(wù)處理)將入庫單錄入并保存到入庫單明細帳(
業(yè)務(wù)數(shù)據(jù)表)中,同時將入庫數(shù)累加到庫存數(shù)(累計數(shù)據(jù)表)中;
. 定期或不定期,庫存數(shù)核算模塊(檢查完整性檢測與修正)根據(jù)上月末的庫存數(shù)(結(jié)存
數(shù)據(jù)表)、本月已發(fā)生數(shù)(業(yè)務(wù)數(shù)據(jù)表)檢查當前的庫存數(shù)(累計數(shù)據(jù)表)是否符合,不符合
則給出提示,可手工或自動進行更正(當前庫存數(shù)=上月末庫存數(shù)+本月入庫數(shù)-本月出庫數(shù)
);
. 每月初,進行上月的月結(jié)處理。月結(jié)模塊(結(jié)算處理)根據(jù)上月初的庫存數(shù)(結(jié)存數(shù)據(jù)
表)、上月發(fā)生數(shù)(業(yè)務(wù)數(shù)據(jù)表)計算出上月末的庫存數(shù)(累計數(shù)據(jù)表)。公式為:上月末庫
存數(shù)=上月初庫存數(shù)+上月入庫數(shù)-上月出庫數(shù);
. 每個月月結(jié)后,庫存業(yè)務(wù)月統(tǒng)計模塊(統(tǒng)計處理)統(tǒng)計上月的各種庫存商品的入庫和
出庫數(shù),便于查詢和生成報表,也作為決策
支持的數(shù)據(jù)
基礎(chǔ)。
3.4 數(shù)據(jù)表命名時對數(shù)據(jù)表分類的考慮
. 業(yè)務(wù)數(shù)據(jù)表:t_d_<系統(tǒng)標識>_<表標識>。如銷售系統(tǒng)的合同表 t_d_SH_Contract
或 t_d_SH_合同;
. 基本編碼表:t_b_[<系統(tǒng)標識>]_<表標識>。如客戶編碼表t_b_Customer 或 t_b_客
戶;
. 輔助編碼表:t_a_[<系統(tǒng)標識>]_<表標識>。如合同類別t_a_ContType 或 t_a_合同
類別;
. 系統(tǒng)信息表:t_s_[<系統(tǒng)標識>]_<表標識>。如用戶表t_s_User 或 t_s_用戶;
. 累計數(shù)據(jù)表:t_t_<系統(tǒng)標識>_<表標識>。如當前庫存表t_t_SO_Stock 或 t_t_SO_
庫存;
. 結(jié)算數(shù)據(jù)表:t_c_<系統(tǒng)標識>_<表標識>。如庫存月結(jié)表t_c_SO_StockMonth 或
t_c_SO_庫存月結(jié);
. 決策數(shù)據(jù)表:t_w_<系統(tǒng)標識>_<表標識>。如月銷售統(tǒng)計表t_w_SH_SellMonth 或
t_w_SH_月銷售統(tǒng)計;
注:[]內(nèi)的內(nèi)容表示可選。如“t_s_[<系統(tǒng)標識>]_<表標識>”表示t_s_SH_User 和
t_s_User 都是符合規(guī)則的。
4
數(shù)據(jù)庫結(jié)構(gòu)原則
規(guī)定除
數(shù)據(jù)庫設(shè)計所遵循的范式外的一些適用原則,在遵循
數(shù)據(jù)庫設(shè)計范式的基礎(chǔ)上
,合理地劃分表,添加狀態(tài)和控制字段等。
4.1 輔助編碼表
為了使輔助編碼表能起到預(yù)期的效能,又不因過多的輔助編碼表難以管理,故對輔助
編碼表的使用作如下規(guī)定:
1. 當某輔助編碼表的編碼允許用戶添加時,應(yīng)
設(shè)計成“獨立”的數(shù)據(jù)表;否則,將不
允許用戶添加編碼的各輔助編碼表合并成一個“通用”的輔助編碼表。
2. “獨立”的輔助編碼表與主表的列采用主-外約束保證列數(shù)據(jù)完整性。
3. “通用”的輔助編碼表與各主表間沒有約束關(guān)系,主表列的數(shù)據(jù)完整性由列說明的
“域”來保證。
4. “通用”的輔助編碼表除編碼和名稱列外,還有一個標識列,用來標識合并前的各
碼表,該標識列+編碼列作為該表的主鍵。
5. 對于“獨立”的輔助編碼表,用戶只可添加新的編碼和改變名稱,并且不能改變一
個編碼所代表的意義;對于“通用”的輔助編碼表,原則上不允許用戶修改,或只有限地
允許修改名稱。
4.2 基本編碼表
1. 基本編碼表可以有如下的標識列:內(nèi)編碼、外編碼、助記碼、簡稱、全稱。內(nèi)編碼
(唯一編碼)作為主鍵有程序自動生成,用戶不可見;外編碼(唯一編碼)由用戶按某種
規(guī)則自行定義,用戶可見;助記碼為拼音縮,方便錄入,不唯一,重碼時由列表
選擇;簡
稱用于列表顯示和報表,以便縮短行寬。以上的列在實現(xiàn)時可視情況和習(xí)慣加以刪減。
2. 當碼表的列較多且也行較多時,可將上述的標識列和常用的信息存于一個表,將其
它的信息另表存儲。
4.3 業(yè)務(wù)數(shù)據(jù)表
1. 設(shè)有‘錄入人’和‘錄入日期’列,由系統(tǒng)自動記錄。
2. 記錄單據(jù)的表中設(shè)置“自動單據(jù)號”,由兩個字符開始以區(qū)分單據(jù)類型,后跟一數(shù)
字序列表示序號。‘自動單據(jù)號’由系統(tǒng)自動生成,作為主表的主鍵,不允許用戶修改。
當有對應(yīng)的紙質(zhì)單據(jù)時,設(shè)置“單據(jù)號”用于記錄紙質(zhì)單據(jù)的單據(jù)號。
3. 明細表中設(shè)有行序號,自動記錄行的錄入順序。
4. 設(shè)置“存檔標記”列,用于抽取數(shù)據(jù)到?jīng)Q策
數(shù)據(jù)庫時的更新標記。插入新行或修改
已有行時設(shè)置該標記;數(shù)據(jù)抽取后清除該標記。
5. 對于用于查詢過濾條件的列,不可為空,以免行“丟失”。
6. 對于數(shù)值列,不可為空,“0”作為默認值。
7. 對于必要的“冗余”列,如客戶名稱,應(yīng)有相應(yīng)的程序保持各“冗余”列的同一性
,以免出現(xiàn)異議。
8. 設(shè)置“過程狀態(tài)”列和“記錄狀態(tài)”列。過程狀態(tài)列用于記錄如創(chuàng)建、審核、記賬
、沖紅等狀態(tài);記錄狀態(tài)用于記錄如有效、刪除等狀態(tài)。
5
數(shù)據(jù)庫命名原則
5.1 表名
. 業(yè)務(wù)數(shù)據(jù)表:t_d_<系統(tǒng)標識>_<表標識>。
. 基本編碼表:t_b_[<系統(tǒng)標識>]_<表標識>。
. 輔助編碼表:t_a_[<系統(tǒng)標識>]_<表標識>。
. 系統(tǒng)信息表:t_s_[<系統(tǒng)標識>]_<表標識>。
. 累計數(shù)據(jù)表:t_t_<系統(tǒng)標識>_<表標識>。
. 結(jié)算數(shù)據(jù)表:t_c_<系統(tǒng)標識>_<表標識>。
. 決策數(shù)據(jù)表:t_w_<系統(tǒng)標識>_<表標識>。
5.2 視圖
v_<視圖類型>_[<系統(tǒng)標識>]_<視圖標識>。視圖類型參見《表的分類》。
5.3 存儲過程
p_[<系統(tǒng)標識>]_<存儲過程標識>
5.4 函數(shù)
f_[<系統(tǒng)標識>]_<函數(shù)標識>
5.5 觸發(fā)器
tr_<表名>_<i,u,d的任意組合> (after)
ti_<表名>_<i,u,d的任意組合> (instead)
5.6 自定義數(shù)據(jù)類型
ud_<自定義數(shù)據(jù)類型標識>_<數(shù)據(jù)類型>
5.7 Default
df_<Default標識>
5.8 Rule
ru_<Rule標識>
5.9 主鍵
pk_<表名>_<主鍵標識>
5.10 外鍵
fk_<表名>_<主表名>_<外鍵標識>
posted @
2007-04-09 16:46 larryjava 閱讀(169) |
評論 (0) |
編輯 收藏
jikes
是一個速度遠快于 javac 的
java
編譯器.
整合 ant 的方法:
- 設(shè)置環(huán)境變量 JIKESHOME 為 jikes 的路徑
- 設(shè)置 ANT_OPTS=-Dbuild.compiler=jikes
- 將 jikes 路徑添加到系統(tǒng) PATH 中
注意區(qū)分大小寫.
然后在所有的ant任務(wù)就默認使用 jikes 了, 如果你想在單個工程中使用 ant, 就不要添加 ANT_OPTS 環(huán)境變量, 只需要修改 build.xml 中 javac 標簽中的 compiler 為 jikes, 例如:
<javacdestdir="${build.dir}"debug="true"deprecation="false"optimize="false"failonerror="true"compiler="jikes">
jikes 中可以設(shè)置如下值:
- classic ( JDK 1.1 或者 1.2 標準 ) – 也可以使用 javac1.1 和 javac1.2 作為別名.
- modern ( JDK 1.3/1.4/1.5 標準 ) – javac1.3, javac1.4, javac1.5 可以作為別名.
- jikes
- jvc - 微軟的那個編譯器
- kjc - kopi 編譯器
- gcj - GCC 中的 gcj 編譯器
- sj - Symantec 的 java 編譯器
- extJavac 根據(jù)現(xiàn)有 jvm 決定使用 classic 或者 modern 模式
另外 jikes 中還有幾個附加的屬性設(shè)置:
build.compiler.emacs=false
build.compiler.fulldepend=false
build.compiler.pedantic=false
build.compiler.warnings=true
build.compiler.warnings 這個屬性設(shè)置最好在 javac 標簽中使用 nowarn 屬性.
保存為 build.properties 文件, 在 build.xml 中這樣調(diào)用:
<propertyfile="build.properties"/>
就可以使用 jikes 的附加屬性了。
整合 tomcat 的方法:先如上設(shè)置 JIKESHOME 和系統(tǒng) PATH ,在 web 應(yīng)用的 web.xml 中添加:
?
<servlet>?
????<servlet-name>?
????jsp?
????</servlet-name>?
????<servlet-class>?
????org.apache.jasper.servlet.JspServlet?
????</servlet-class>?
????<init-param>?
????????<param-name>jspCompilerPlugin</param-name>?
????????<param-value>org.apache.jasper.compiler.JikesJavaCompiler</param-value>?
????</init-param>?
????<load-on-startup>?
????-1?
????</load-on-startup>?
????</servlet>?
????<servlet-mapping>?
????????<servlet-name>?
????????jsp?
????????</servlet-name>?
????????<url-pattern>?
????????*.jsp?
????????</url-pattern>?
????</servlet-mapping>
如果想要在所有 WEB 應(yīng)用中使用 jikes, 則設(shè)置環(huán)境變量 CATALINA_OPTS=-Dbuild.compiler.emacs=true, 然后打開 ${TOMCAT_HOME}/conf/web.xml, 找到:
<servlet>?
????<servlet-name>jsp</servlet-name>?
????<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>?
????<init-param>?
????????<param-name>fork</param-name>?
????????<param-value>false</param-value>?
????????</init-param>?
????<init-param>?
????<param-name>xpoweredBy</param-name>?
????????<param-value>false</param-value>?
????????</init-param>?
????<load-on-startup>3</load-on-startup>?
</servlet>改為:
<servlet>?
????<servlet-name>jsp</servlet-name>?
????<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>?
????<init-param>?
????????<param-name>fork</param-name>?
????????<param-value>false</param-value>?
????</init-param>?
????<init-param>?
????????<param-name>compiler</param-name>?
????????<param-value>jikes</param-value>?
????</init-param>?
????<init-param>?
????????<param-name>xpoweredBy</param-name>?
????????<param-value>false</param-value>?
????</init-param>?
????<load-on-startup>3</load-on-startup>?
</servlet>

posted @
2007-02-05 10:03 larryjava 閱讀(271) |
評論 (0) |
編輯 收藏
#
!/
bin
/
sh
#
#?chkconfig:?
345
?
86
?
14
#?description:?manager?tomcat
#
#?filename:
/
etc
/
rc.d
/
init.d
/
tomcat5
#

javaDir
=
`ls?
/
usr
/
java`
for
?java?in?$javaDir
do
export?JAVA_HOME
=
"
/usr/java/${java}
"
done

export?TOMCAT_HOME
=
"
/usr/tomcat5
"
case
?$
1
?in
start)?$TOMCAT_HOME
/
bin
/
startup.sh
;;
stop)?$TOMCAT_HOME
/
bin
/
shutdown.sh
;;
restart)?$TOMCAT_HOME
/
bin
/
shutdown.sh
$TOMCAT_HOME
/
bin
/
startup.sh
;;
*
)?echo?
"
Usage:?$0?{start|stop|restart}
"
;;
esac
exit?
0
posted @
2007-02-02 09:40 larryjava 閱讀(251) |
評論 (0) |
編輯 收藏
Tomcat啟動可以用自帶的確jsvc來實現(xiàn):jsvc本來要從
http://jakarta.apache.org/ 下載 commons-daemon-1.0-Alpha ,不過tomcat 已經(jīng)自己帶了一個了,在tomcat/bin目錄下有一個jsvc.tar.gz 解壓,編譯: #tar -xzvf jsvc.tar.gz #cd jsvc-src 運行#sh support/buildconf.sh #./configure --with-java=/usr/java#make(注意:tomcat-5.0.18版本帶的jsvc源代碼有一個低級錯誤--少一個分號,會導(dǎo)致編譯不成功,可以自己加上這個分號) tomcat自己帶的jsvc-src/native目錄下還有兩個腳本 Tomcat.sh 和 Tomcat5.sh ,可以用作啟動和停止tomcat的腳本,我把Tomcat5.sh略作修改,文件如下: 代碼:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#!/bin/sh
#
# Startup Script for Tomcat5
#
# chkconfig: 345 87 13
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /var/run/jsvc.pid
# config:
#
# Source function library.
. /etc/rc.d/init.d/functions
#
prog=tomcat
#
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml
# file:
#
#???
#??? #?????????????? port="80" minProcessors="5" maxProcessors="75"
#?????????????? enableLookups="true" redirectPort="8443"
#?????????????? acceptCount="10" debug="0" connectionTimeout="60000"/>
#
# You need a developement version of Tomcat (Apache Tomcat/4.1-dev)
#
# Adapt the following lines to your configuration #設(shè)定自己的參數(shù)
JAVA_HOME=/usr/local/j2sdk1.4.2-04
CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.19
DAEMON_HOME=$CATALINA_HOME/bin
#需要在系統(tǒng)中設(shè)定一個沒有權(quán)限的
#用戶來運行,這樣比較安全
TOMCAT_USER=tomcat5
TMP_DIR=/var/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar start(){
??? echo -n $"Starting $prog: "
??? #
??? # Start Tomcat
??? #
??? $DAEMON_HOME/jsvc-src/jsvc \
??? -user $TOMCAT_USER \
??? -home $JAVA_HOME \
??? -Dcatalina.home=$CATALINA_HOME \
??? -Djava.io.tmpdir=$TMP_DIR \
??? -outfile $CATALINA_HOME/logs/catalina.out \
??? -errfile '&1' \
??? $CATALINA_OPTS \
??? -cp $CLASSPATH \
??? org.apache.catalina.startup.Bootstrap
??? #
??? # To get a verbose JVM
??? #-verbose \
??? # To get a debug of jsvc.
??? #-debug \
??? RETVAL=$?
??? [ $RETVAL = 0 ] && touch /var/lock/subsys/jsvc
??? [ $RETVAL = 0 ] && echo_success || echo_failure
??? echo
??? return $RETVAL
}
stop(){
??? echo -n $"Stopping $prog: "
??? #
??? # Stop Tomcat
??? #
??? PID=`cat /var/run/jsvc.pid`
??? kill $PID
??? RETVAL=$?
??? [ $RETVAL = 0 ] && rm /var/lock/subsys/jsvc
??? [ $RETVAL = 0 ] && echo_success || echo_failure
??? echo
??? return $RETVAL
} case "$1" in
? start)
??????? start
??? ;; ? stop)
??????? stop
??? ;; ? restart|reload)
??????? stop
??????? start
??? ;; ? *)
??? echo "Usage $0 start/stop"
??? exit 1;;
esac^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^把這段代碼保存為 /etc/rc.d/init.d/tomcat ,然后運行 #chkconfig --add tomcat用--list看一下是否系統(tǒng)已有tomcat啟動文件
#ckhconfig --list即可把tomcat 添加為系統(tǒng)服務(wù)自動隨系統(tǒng)啟動了。這個腳本會在runlevel 3/4/5三種模式自動啟動。注意這段腳本是為tomcat5創(chuàng)建的,如果你用tomcat4,則需要在另一個tomcat.sh的基礎(chǔ)上修改。??
posted @
2007-02-02 09:26 larryjava 閱讀(164) |
評論 (0) |
編輯 收藏
webwork默認的類型轉(zhuǎn)換是不支持lob的,開發(fā)的時候formBean直接用域模型代替,往往根據(jù)域模型生成的model有l(wèi)ob字段,webwork不支持,我們需要手工加個。
java 代碼
?
??

public?class?ClobConverter?extends?DefaultTypeConverter?
{???
???
????@Override???

????public?Object?convertValue(Map?map,?Object?object,?Class?clazz)?
{???

????????if?(null?!=?object?&&?clazz?==?Clob.class)?
{???
????????????return?ClobUtils.createClob(String.valueOf(object));???
????????}???
????????return?super.convertValue(map,?object,?clazz);???
????}???
}???在classpath中加上如下的全局的類型轉(zhuǎn)換:xwork-conversion.properties
properties代碼
java.sql.Clob=com.shunpe.framework.typeconverter.ClobConverter??
posted @
2007-01-13 18:17 larryjava 閱讀(193) |
評論 (0) |
編輯 收藏
返回值進行區(qū)分: 1.如果是String型
代碼
-
<
ww:
if
?test
=
"
sftd.equals(\
"
4
\
"
)
"
></
ww:
if
>
2.如果是char型
代碼
-
<
ww:
if
?test
=
"
sftd.equals('4')
"
></
ww:
if
>
3.如果是int型
代碼
-
<
ww:
if
?test
=
"
sftd==4
"
></
ww:
if
>
?
?
在循環(huán)中:
代碼
注意:id==model.belong,而不是belong==model.belong
定義變量
代碼 <ww:set?name="tt1"?value="'aaaaaaaaaaaaaa'"/>????
<ww:property?value="#tt1"/>???
 注意:字符串要加''
日期顯示:
<ww:property?value="createTime.toString()"?/>

<ww:if?test="selectedByOthers!='true'">

<input?onclick="ST(this);?"?type="checkbox"?name="$$SelectDoc"?value="<ww:property?value='id'/>"?style="border:?0pt;"/>

</ww:if>

<ww:else>

<input?type="radio"?name="$$SelectDoc"?value="<ww:property?value='id'/>|<ww:property?value='topic'/>"

<ww:if?test="id.toString().equals(aboutDocid)">checked</ww:if>?

<ww:if?test="#status.count?%?2">style="border:?0pt;"</ww:if>

<ww:else>style="border:?0pt;background-color:#F7F7F7"</ww:else>?>

</ww:else>

 在ww:if比較時id.toString().equals(aboutDocid)中的id是長整型,必須通過toString()成為字符串后再與字符型的aboutDocid比較,否則不報錯,卻也得不到想要的結(jié)果。因為這些代碼是寫在jsp頁面的,這個小細節(jié)經(jīng)常忘記,導(dǎo)致顯示的結(jié)果不正確卻又一時想不起原因來。:) |
posted @
2007-01-13 17:45 larryjava 閱讀(293) |
評論 (0) |
編輯 收藏
轉(zhuǎn)載于CSDN
在.net開發(fā)中,充分利用免費控件是好事情,但是如果不能修改控件達到自己的需求,就要動用JS大法了,前提是研究好瀏覽器模型 的各種對象的方法屬性。尤其是熟悉CSS+HTML就會做的很酷。就JS語言本身來說要求不高。
1,動態(tài)刪除Table 里面內(nèi)容技巧,不需要寫太多代碼,一行:
tb.removeNode(true)
2,動態(tài)增加行,除了CreateElement方法,還可以這樣比較短小:
<table id=tb1></table>
<SCRIPT>
function addTable(){
? var row1 = tb1.insertRow();
? var cell1=row1.insertCell();
? var cell2=row1.insertCell();
? cell1.innerText="灰豆寶寶";
? cell2.innerText="超級大笨狼"
}
</SCRIPT>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
3,在DIV中動態(tài)增加Table
<SCRIPT>
function addTable(){
? var tb1 = document.createElement("table");
? tb1.border="1px";
? var row1 = tb1.insertRow();
? var cell1=row1.insertCell();
? var cell2=row1.insertCell();
? mydiv.appendChild(tb1);
? cell1.innerText="wanghr100";
? cell2.innerText="panyuguang962"
}
</SCRIPT>
<BODY>
<div id=mydiv style="width:400;height:300;"></div>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
4,在DIV中刪除Table,簡單只要Div.innerHTML=""就可以。
以上是部分實用相對短小的代碼,當然有其他各種辦法實現(xiàn),不過一般都比上面的長,比如組合使用DIV對象的insertAdjacentHTML 方法等,在不同需要下使用不同方法,前提是研究好瀏覽器模型 的各種對象的方法屬性。尤其是熟悉CSS+HTML就會做的很酷。就JS語言本身來說要求不高。
以下是以Document對象為例,相關(guān)方法有:
Method Description
attachEvent
createAttribute ?
createComment ?
createDocumentFragment
createElement
createEventObject
createStyleSheet
createTextNode
detachEvent
getElementById ?
getElementsByName
getElementsByTagName
mergeAttributes
recalc
write ?
writeln
以DIV對象為例相關(guān)方法有:
addBehavior
appendChild
applyElement
attachEvent
clearAttributes
cloneNode
contains
detachEvent
getAdjacentText ?
getAttribute ?
getAttributeNode
getElementsByTagName
hasChildNodes
insertAdjacentElement
insertAdjacentHTML
insertAdjacentText
insertBefore
mergeAttributes
normalize
removeAttribute
removeAttributeNode ?
removeBehavior
removeChild
removeExpression
removeNode
replaceAdjacentText
replaceChild
replaceNode
setActive
setAttribute
setAttributeNode
setExpression ?
其他,比如下拉列表對象,和拖拽操作等我有時間也整理比較一下,實現(xiàn)相同功能,相對比較短的精彩代碼是值得收藏的。
1. removeNode(true) 非IE瀏覽器不支持的,應(yīng)該用 obj.parentNode.removeChild(obj);
2. insertRow(x) insertCell(y) 這個參數(shù)是IE里是可以缺省,但是在非IE瀏覽器里不可缺省
<SCRIPT>
function addTable(){
? var tb1 = document.createElement("TABLE");
? tb1.border="1px";
? var row1 = tb1.insertRow(0);
? var cell1=row1.insertCell(0);
? var cell2=row1.insertCell(1);
? document.getElementById("mydiv").appendChild(tb1);
? cell1.innerHTML="wanghr100";
? cell2.innerHTML="panyuguang962";
? row1.insertCell(2).innerHTML="要注意:給的例子要考慮全面";
}
</SCRIPT>
<BODY>
<div id="mydiv" style="width:400;height:300;"></div>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
posted @
2006-11-24 19:10 larryjava 閱讀(393) |
評論 (0) |
編輯 收藏
Oralce中的to_date()函數(shù)用于將字符串轉(zhuǎn)換為日期對象,具體使用格式為:
to_date(?string,?
[
?format_mask?
]
,?
[
?nls_language?
]
?)
string1
要轉(zhuǎn)換的字符串.
format_mask
可選項,日期轉(zhuǎn)換格式.
nls_language
可選項. 指定用于轉(zhuǎn)換字符串的nls language.
其中
format_mask主要有以下幾種格式:
Format Code
|
Explanation
|
YEAR
|
Year, spelled out
|
YYYY
|
4-digit year
|
MM
|
Month (01-12; JAN = 01).
|
MON
|
Abbreviated name of month.
|
MONTH
|
Name of month, padded with blanks to length of 9 characters.
|
D
|
Day of week (1-7).
|
DAY
|
Name of day.
|
DD
|
Day of month (1-31).
|
DDD
|
Day of year (1-366).
|
DY
|
Abbreviated name of day.
|
HH
|
Hour of day (1-12).
|
HH12
|
Hour of day (1-12).
|
HH24
|
Hour of day (0-23).
|
MI
|
Minute (0-59).
|
SS
|
Second (0-59).
|
SSSSS
|
Seconds past midnight (0-86399).
|
[問題]
ORA-01810: format code appears twice
可能是像Java那樣指定日期格式,比如:
to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:MM:ss')
而在Oracle中的日期格式是不區(qū)分大小寫的,所以 mm 出現(xiàn)了兩次。
正確的寫法是:
to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:mi:ss')
ORA-01722: invalid number
可能是指定小時為hh,而hh取值范圍是 1-12,所以如果指定小時為 0 點將出現(xiàn)這個異常,比如:
to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh:MM:ss')
正確的寫法是:
to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh24:MM:ss')
posted @
2006-11-19 20:18 larryjava 閱讀(354) |
評論 (0) |
編輯 收藏
在很多程序請求是都有等待的頁面!
在WebWork2.1.1開始,就新增了一個攔截器:execAndWait
<interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/>
execAndWait將請求的Action放到后臺執(zhí)行,同時返回"wait"的輸出結(jié)果;再次同樣的Action請求,如果Action執(zhí)行完畢,它將返回
真正的輸出結(jié)果。
注意:"wait"輸出等待頁面時必須包含下面語句:
<meta http-equiv="refresh" content="5;url="<ww:url includeParams="'all'" />">
它每隔5秒鐘,重新刷新前面的action請求。
?
Example:
// WaitAction.java
package example.wait;
import com.opensymphony.xwork.Action;
public class WaitAction implements Action{
?public String execute() throws Exception {
??try {
??????????? System.out.println("-----start sleep!");
??????????? Thread.sleep(2000 * 10);
??????????? System.out.println("-----end sleep!");
??????? } catch (InterruptedException e) {
??????????? e.printStackTrace();
??????? }
??return SUCCESS;
?}
}
?
xwork.xml:
?<action name="wait" class="example.wait.WaitAction">
??????????? <result name="success" type="dispatcher">
??????????????? <param name="location">/success.jsp</param>
??????????? </result>
??????????? <result name="wait" type="dispatcher">
??????????????? <param name="location">/wait.jsp</param>
??????????? </result>
??????????? <interceptor-ref name="execAndWait"/>
??????? </action>
wait.jsp:
<%@ taglib uri="webwork" prefix="ww" %>
<HTML>
<HEAD>
<meta http-equiv="refresh" content="5;url="<ww:url includeParams="'all'" />">
</HEAD>
<BODY>
Wait..............
</BODY>
</HTML>
posted @
2006-11-08 17:13 larryjava 閱讀(457) |
評論 (0) |
編輯 收藏
?
posted @
2006-11-01 16:30 larryjava 閱讀(280) |
評論 (0) |
編輯 收藏