版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
./JEECG智能開(kāi)發(fā)平臺(tái)V3開(kāi)發(fā)指南2013/4/2張代浩目錄1.前言41.1.技術(shù)背景41.2.平臺(tái)介紹41.3.平臺(tái)優(yōu)勢(shì)51.4.平臺(tái)架構(gòu)62.JEECG框架初探82.1.演示系統(tǒng)82.2.示例代碼103.JEECG開(kāi)發(fā)環(huán)境搭建123.1.JAVA環(huán)境配置123.2.開(kāi)發(fā)環(huán)境搭建133.2.1.項(xiàng)目導(dǎo)入開(kāi)發(fā)環(huán)境133.2.2.數(shù)據(jù)庫(kù)初始化153.2.3.項(xiàng)目數(shù)據(jù)源配置163.2.4.項(xiàng)目啟動(dòng)測(cè)試174.代碼生成器194.1.數(shù)據(jù)表創(chuàng)建194.2.代碼生成器配置194.3.代碼生成204.4.功能測(cè)試224.4.1.添加菜單并授權(quán)224.4.2.功能測(cè)試234.5.代碼生成器使用規(guī)則234.5.1.建表規(guī)范234.5.2.頁(yè)面生成規(guī)則245.查詢(xún)HQL過(guò)濾器265.1.數(shù)據(jù)過(guò)濾現(xiàn)狀分析265.2.查詢(xún)條件SQL生成器265.2.1.實(shí)現(xiàn)原理265.2.2.查詢(xún)規(guī)則265.2.3.具體實(shí)現(xiàn)276.表單校驗(yàn)組件ValidForm296.1.Validform使用入門(mén)296.2.綁定附加屬性296.3.初始化參數(shù)說(shuō)明336.4.Validform對(duì)象[方法支持鏈?zhǔn)秸{(diào)用]386.5.調(diào)用外部插件446.6.Validform的公用對(duì)象447.基礎(chǔ)用戶權(quán)限467.1.權(quán)限設(shè)計(jì)467.2.權(quán)限設(shè)計(jì)目標(biāo)477.3.目前系統(tǒng)設(shè)計(jì)477.3.1.數(shù)據(jù)表477.3.2.頁(yè)面菜單478.JEECG注意規(guī)則499.項(xiàng)目編碼規(guī)范509.1.項(xiàng)目編碼規(guī)范509.2.詳細(xì)說(shuō)明5010.JEECG目錄結(jié)構(gòu)5210.1.配置文件目錄結(jié)構(gòu)5210.2.Java源碼目錄結(jié)構(gòu)5210.3.單元測(cè)試代碼結(jié)構(gòu)5310.4.JSP頁(yè)面目錄結(jié)構(gòu)5311.附錄5411.1.UI庫(kù)常用控件參考示例5411.2.開(kāi)發(fā)技巧:采用IFrame打開(kāi)頁(yè)面5511.3.開(kāi)發(fā)技巧:組合查詢(xún)實(shí)現(xiàn)方法551.
前言1.1.
技術(shù)背景隨著WEB
UI
框架<EasyUI/Jquery
UI/Ext/DWZ>等的逐漸成熟,系統(tǒng)界面逐漸實(shí)現(xiàn)統(tǒng)一化,代碼生成器也可以生成統(tǒng)一規(guī)范的界面!代碼生成+手工MERGE半智能開(kāi)發(fā)將是新的趨勢(shì),生成的代碼可節(jié)省50%工作量,快速提高開(kāi)發(fā)效率!1.2.
平臺(tái)介紹JEECG
[J2EE
Code
Generation]
是一款基于代碼生成器的智能開(kāi)發(fā)平臺(tái),采用代碼生成+手工MERGE半智能開(kāi)發(fā)模式,
可以幫助解決Java項(xiàng)目60%的重復(fù)工作,讓開(kāi)發(fā)更多關(guān)注業(yè)務(wù)邏輯。既能快速提高開(kāi)發(fā)效率,幫助公司節(jié)省人力成本,同時(shí)又不失擴(kuò)展性和靈活性。
JEECG宗旨:簡(jiǎn)單功能由代碼生成器生成使用;
復(fù)雜業(yè)務(wù)采用表單自定義,業(yè)務(wù)流程使用工作流來(lái)實(shí)現(xiàn)、擴(kuò)展出任務(wù)接口,供開(kāi)發(fā)編寫(xiě)業(yè)務(wù)邏輯。
實(shí)現(xiàn)了流程任務(wù)節(jié)點(diǎn)和任務(wù)接口的靈活配置,既保證了公司流程的保密行,又減少了開(kāi)發(fā)人員的工作量。
JEECG
V3.0版本推翻原有SSH2架構(gòu),采用SpringMVC+Hibernate+UI快速開(kāi)發(fā)庫(kù)作為基礎(chǔ)架構(gòu),采用面向聲明的開(kāi)發(fā)模式,基于泛型方式編寫(xiě)極少代碼即可實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)展示、數(shù)據(jù)編輯、表單處理等功能,再配合代碼生成器的使用將JavaEE的開(kāi)發(fā)效率提高6倍以上,可以將代碼減少60%以上。JEECG
V3.0版本四大技術(shù)點(diǎn):
1.代碼生成器
2.UI快速開(kāi)發(fā)庫(kù)
3.在線流程設(shè)計(jì)
4.系統(tǒng)日志記錄?!?/p>
代碼生成器:支持多種數(shù)據(jù)模型,根據(jù)表生成對(duì)應(yīng)的Entity,Service,Dao,Controller,
JSP等,增刪改查功能生成直接使用·
UI快速開(kāi)發(fā)庫(kù):針對(duì)WEB
UI進(jìn)行標(biāo)準(zhǔn)封裝,頁(yè)面統(tǒng)一采用UI標(biāo)簽實(shí)現(xiàn)功能:數(shù)據(jù)datagrid,表單校驗(yàn),Popup,Tab等,實(shí)現(xiàn)JSP頁(yè)面零JS,開(kāi)發(fā)維護(hù)非常高效·
在線流程設(shè)計(jì):在線流程定義,采用開(kāi)源Activiti流程引擎,實(shí)現(xiàn)在線畫(huà)流程,自定義表單,表單掛接,業(yè)務(wù)流轉(zhuǎn),流程監(jiān)控,流程跟蹤,流程委托等·
系統(tǒng)日志記錄:系統(tǒng)操作日志詳細(xì)記錄,幫助運(yùn)維人員進(jìn)行系統(tǒng)分析和故障排查。V3版本特性·
JEECG
V3.0,經(jīng)過(guò)了專(zhuān)業(yè)壓力測(cè)試,性能測(cè)試,保證后臺(tái)數(shù)據(jù)的準(zhǔn)確性和頁(yè)面訪問(wèn)速度·
支持多種瀏覽器:
IE,
火狐,
等瀏覽器訪問(wèn)速度都很快·
支持?jǐn)?shù)據(jù)庫(kù):
Mysql,Oracle10g等·
基礎(chǔ)權(quán)限:
用戶,角色,菜單權(quán)限,按鈕權(quán)限,數(shù)據(jù)權(quán)限·
智能報(bào)表集成:
簡(jiǎn)易的圖像報(bào)表工具和Excel導(dǎo)入導(dǎo)出·
Web容器測(cè)試通過(guò)的有Jetty和Tomcat6·
待推出功能:分布式部署,云計(jì)算,移動(dòng)平臺(tái)開(kāi)發(fā),規(guī)則引擎,代碼生成器<eclipse插件>·
要求JDK1.6+1.3.
平臺(tái)優(yōu)勢(shì)ü
采用主流開(kāi)源技術(shù)框架,容易上手;
代碼生成器依賴(lài)性低,很方便的擴(kuò)展能力,可完全實(shí)現(xiàn)二次開(kāi)發(fā);ü
開(kāi)發(fā)效率很高,代碼生成器支持多種數(shù)據(jù)模型:?jiǎn)伪頂?shù)據(jù)模型、單表自關(guān)聯(lián)模型和一對(duì)多<父子表>數(shù)據(jù)模型,代碼生成功能直接使用;ü
查詢(xún)SQL過(guò)濾器,后臺(tái)不需要寫(xiě)代碼,頁(yè)面追加查詢(xún)字段,查詢(xún)功能自動(dòng)實(shí)現(xiàn)ü
頁(yè)面校驗(yàn)自動(dòng)生成<必須輸入、數(shù)字校驗(yàn)、金額校驗(yàn)、時(shí)間控件等>;ü
基礎(chǔ)的用戶權(quán)限:菜單,按鈕權(quán)限,角色ü
常用共通封裝,各種工具類(lèi)<定時(shí)任務(wù),短信接口,郵件發(fā)送,Excel導(dǎo)出等>,基本滿足80%項(xiàng)目需求ü
集成簡(jiǎn)易報(bào)表工具,圖像報(bào)表和數(shù)據(jù)導(dǎo)出非常方便,可極其方便的生成pdf、excel、word等報(bào)表;ü
集成工作流引擎Activiti5,并實(shí)現(xiàn)了只需在頁(yè)面配置流程轉(zhuǎn)向,可極大的簡(jiǎn)化工作流的開(kāi)發(fā);用Activiti5的流程設(shè)計(jì)器畫(huà)出流程走向,一個(gè)工作流基本就完成了,只需進(jìn)行流程的配置或者寫(xiě)很少量的java代碼1.4.
平臺(tái)架構(gòu)架構(gòu)技術(shù):
Spring
MVC+Hibernate4+UI快速開(kāi)發(fā)庫(kù)+Spring
JDBC+Highcharts圖形報(bào)表+Jquery+Ehcache。設(shè)計(jì)思想:
零配置〔
約定大于配置各技術(shù)點(diǎn)說(shuō)明[1]
代碼生成器代碼生成器用于生成規(guī)范的后臺(tái)代碼+統(tǒng)一風(fēng)格的前臺(tái)頁(yè)面+表單校驗(yàn)。單表模型,單表自關(guān)聯(lián)模型和一對(duì)多<父子表>數(shù)據(jù)模型,增刪改查功能生成直接使用;特點(diǎn):A.前臺(tái)頁(yè)面字段對(duì)應(yīng)數(shù)據(jù)庫(kù)字段生成;B.
頁(yè)面字段校驗(yàn)自動(dòng)生成〔數(shù)字類(lèi)型\必須項(xiàng)\金額類(lèi)型\時(shí)間控件\郵箱\手機(jī)號(hào)\QQ號(hào)等等>;
C.支持Oracle/Mysql/Postgres數(shù)據(jù)庫(kù)注意:代碼生成包括JSP頁(yè)面生成,代碼無(wú)需修改,增刪改查功能直接配置使用[2].查詢(xún)條件過(guò)濾器頁(yè)面加查詢(xún)條件,后臺(tái)不需要寫(xiě)任何邏輯判斷,動(dòng)態(tài)拼HQL追加查詢(xún)條件[3].UI快速開(kāi)發(fā)庫(kù)UI快速開(kāi)發(fā)庫(kù),針對(duì)WEB
UI進(jìn)行標(biāo)準(zhǔn)封裝,頁(yè)面統(tǒng)一采用UI標(biāo)簽實(shí)現(xiàn)功能:數(shù)據(jù)datagrid,表單校驗(yàn),Popup,Tab等,實(shí)現(xiàn)JSP頁(yè)面零JS,開(kāi)發(fā)維護(hù)非常高效[4].智能工作流在線流程定義,采用開(kāi)源Activiti流程引擎,實(shí)現(xiàn)在線畫(huà)流程,自定義表單,表單掛接,業(yè)務(wù)流轉(zhuǎn),流程監(jiān)控,流程跟蹤,流程委托等[5].表單Form校驗(yàn)組件前臺(tái)頁(yè)面字段校驗(yàn)采用Validform
表單檢驗(yàn)組件[6].常用共通封裝數(shù)據(jù)字典/
郵件發(fā)送/
定時(shí)任務(wù)/短信接口/Freemarker模板工具/Jquery[7].基礎(chǔ)用戶權(quán)限權(quán)限功能:用戶、角色、權(quán)限〔菜單權(quán)限+按鈕權(quán)限[8].Ehcache緩存機(jī)制Ehcache緩存自定義標(biāo)簽〔永久緩存/臨時(shí)緩存[9].報(bào)表封裝Excel簡(jiǎn)易導(dǎo)出工具類(lèi)+Highcharts圖形報(bào)表[10].Hibernate+Spring
jdbc
組合使用Hibernate+Spring
jdbc組合使用〔單表操作使用Hibernate;復(fù)雜SQL采用SQL,<1>
SQL設(shè)計(jì)方案:DB
SQL抽離出Java代碼,采用命名規(guī)范根據(jù)類(lèi)名和方法名創(chuàng)建SQL文件,存儲(chǔ)SQL;
<2>
程序自動(dòng)讀取SQL;<3>
SQL讀取模式:開(kāi)發(fā)模式和發(fā)布模式[SQL加載內(nèi)存]。[11].安全的事務(wù)回滾機(jī)制+安全的數(shù)據(jù)樂(lè)觀鎖機(jī)制[12].系統(tǒng)日志記錄,便于問(wèn)題追蹤2.
JEECG框架初探2.1.
演示系統(tǒng)打開(kāi)瀏覽器,輸入JEECG演示環(huán)境地址::8080,可以看到如圖
21所示的登錄界面。圖
2-1
演示系統(tǒng)登錄界面點(diǎn)擊[登陸]按鈕,進(jìn)入演示系統(tǒng)的主界面,如圖
22所示。圖
2-2
演示系統(tǒng)主界面在JEECG演示系統(tǒng)中的功能模塊包括系統(tǒng)管理、流程管理、業(yè)務(wù)申請(qǐng)、業(yè)務(wù)辦理、常用功能演示等。其中,用戶管理、流程設(shè)計(jì)器的界面截圖如圖
2-3和圖
2-4所示。圖
2-3
用戶管理界面圖
24
流程設(shè)計(jì)器2.2.
示例代碼用戶管理中的用戶列表和用戶維護(hù)所用的jsp頁(yè)面代碼分別如圖
25和圖
26所示。圖
25
列表頁(yè)面代碼圖
26
用戶管理頁(yè)面代碼3.
JEECG
開(kāi)發(fā)環(huán)境搭建JEECG推薦的開(kāi)發(fā)環(huán)境為Myeclipse6.5/Eclipse3.7+JDK1.6+Tomcat6.03.1.
JAVA環(huán)境配置通過(guò)Oracle的官方地址下載JDK開(kāi)發(fā)包:推薦下載最新的Java
SE
6版本,目前最新的Java
SE
6
SDK版本為Update
43,如圖
31所示。圖
31
最新SDK下載鏈接將下載的開(kāi)發(fā)包安裝到本機(jī)非中文路徑的目錄中,如本機(jī)的。安裝完JDK之后,需要配置本機(jī)的環(huán)境變量如下:PATH=%JAVA_HOME%/bin;Classpath=.;%JAVA_HOME%\lib;3.2.
開(kāi)發(fā)環(huán)境搭建3.2.1.
項(xiàng)目導(dǎo)入開(kāi)發(fā)環(huán)境將下載到的源代碼解壓到本地磁盤(pán),通過(guò)eclipse的Import->Existing
Projects
into
Workspace功能將源代碼導(dǎo)入到MyEclipse開(kāi)發(fā)環(huán)境中,在項(xiàng)目導(dǎo)入之后,需要對(duì)編譯環(huán)境進(jìn)行檢查,如果編譯環(huán)境中缺少J2EE支持的話,需要手動(dòng)加上,如圖
32所示。圖
32
Myeclipse編譯環(huán)境如果你使用的是eclipse,而不是MyEclipse做為開(kāi)發(fā)工具,將項(xiàng)目導(dǎo)入到eclipse之后,需要為項(xiàng)目添加eclipse的WTP項(xiàng)目支持。在導(dǎo)入的工程上右鍵Propertis->Project
Facets,選擇Convert
to
faceted
from…,如圖
33所示。圖
33
為工程添加WTP項(xiàng)目支持在打開(kāi)的界面中,勾選"Dynamic
Web
Module"和"Java",分別選擇其Version為2.5和1.6,并為項(xiàng)目添加Tomcat的運(yùn)行時(shí)支持,如圖
34所示。圖
34
Project
Facets及運(yùn)行時(shí)選擇選擇完P(guān)roject
Facets之后,點(diǎn)擊界面下方的"Futher
configuration
avaliable"鏈接,在彈出的新窗口中,填寫(xiě)Content
directory的值為"WebRoot",并將Generate
web.xml
deployment
descriptor前面的復(fù)選框取消勾選,并為"Content
root"命名為合適的值,如圖
35所示。圖
35
Web
Module設(shè)置確定之后,完成對(duì)工程的web化支持。3.2.2.
數(shù)據(jù)庫(kù)初始化在mysql數(shù)據(jù)庫(kù)中新建一編碼為UTF8的數(shù)據(jù)庫(kù)jeecg。通過(guò)命令:mysql
-proot
-uroot
jeecg
<
d:/projects/jeecg/doc/jeecgv3-init.sql將工程目錄中的doc
/
jeecgv3-init.sql腳本導(dǎo)入到新建的jeecg數(shù)據(jù)庫(kù)中。此時(shí)使用show
tables;命令查看數(shù)據(jù)庫(kù)中的表,可以看到如圖
36的結(jié)果,已經(jīng)有70張表入庫(kù)。圖
36
數(shù)據(jù)庫(kù)初始化3.2.3.
項(xiàng)目數(shù)據(jù)源配置對(duì)數(shù)據(jù)庫(kù)進(jìn)行初始化之后,需要相應(yīng)地對(duì)項(xiàng)目中的數(shù)據(jù)源連接進(jìn)行配置。修改項(xiàng)目的數(shù)據(jù)源連接配置文件resources/perties,如圖
37所示。圖
37
項(xiàng)目數(shù)據(jù)源配置修改項(xiàng)目中的代碼生成器數(shù)據(jù)源連接配置文件resources/jeecg/jeecg_database.
properties,如圖
38所示。圖
38
代碼生成器的數(shù)據(jù)源配置另外,根據(jù)自己的需要對(duì)代碼生成器的相關(guān)參數(shù)進(jìn)行配置,配置文件為resources/jeecg/jeecg_perties。3.2.4.
項(xiàng)目啟動(dòng)測(cè)試配置完成之后,啟動(dòng)Tomcat,在瀏覽器地址欄中輸入http://localhost:8080/jeecg/,打開(kāi)的界面如圖
39所示。圖
39
項(xiàng)目登錄頁(yè)面輸入用戶名密碼admin/123456,登陸進(jìn)入主界面,如圖
310所示。圖
310
項(xiàng)目主界面至此,開(kāi)發(fā)環(huán)境搭建完成。4.
代碼生成器本章通過(guò)一個(gè)實(shí)際的示例來(lái)講解JEECG代碼生成器的使用。4.1.
數(shù)據(jù)表創(chuàng)建現(xiàn)在有一張員工表person,其建表SQL為:CREATE
TABLE
`person`
<
`ID`
varchar<32>
NOT
NULL
default
''
COMMENT
'主鍵',
`NAME`
varchar<32>
default
NULL
COMMENT
'用戶名',
`AGE`
int<11>
default
NULL
COMMENT
'年齡',
`SALARY`
decimal<10,2>
default
NULL
COMMENT
'工資',
`createDt`
datetime
default
NULL
COMMENT
'創(chuàng)建時(shí)間',
PRIMARY
KEY
<`ID`>>
ENGINE=InnoDB
DEFAULT
CHARSET=utf8;注意:建表時(shí),必須給每個(gè)字段加上注釋,代碼生成器會(huì)根據(jù)注釋去生成頁(yè)面字段對(duì)應(yīng)的顯示文本。將建表SQL在數(shù)據(jù)庫(kù)管理器里面執(zhí)行,完成對(duì)person表的創(chuàng)建。4.2.
代碼生成器配置代碼生成器有兩個(gè)配置文件:一個(gè)用于數(shù)據(jù)源的配置,一個(gè)用于代碼生成器的參數(shù)配置。這兩個(gè)配置文件分別是resources/jeecg目錄的jeecg_perties和jeecg_perties。參數(shù)配置文件jeecg_perties的各參數(shù)說(shuō)明如表
41所示:表
41
代碼生成器參數(shù)說(shuō)明source_root_packageSource
floders
on
build
path
<JAVA文件的根目錄>src
webroot_packageWEB應(yīng)用文件的根目錄〔例如:jspWebRoot
bussi_package業(yè)務(wù)包〔舉例:比如ERP中的一個(gè)大的模塊
銷(xiāo)售模塊目錄特點(diǎn):支持多級(jí)目錄例如[com.sys]Demo
templatepath代碼生成器使用的模板文件目錄jeecg/template
system_encoding項(xiàng)目編碼utf-8
jeecg_generate_table_id自定義主鍵命名id目前表主鍵只能命名IDjeecg_ui_search_filed_num配置代碼生成器生成的JSP頁(yè)面,默認(rèn)前幾個(gè)字段生成查詢(xún)條件1
jeecg_filed_convert數(shù)據(jù)庫(kù)表字段轉(zhuǎn)換為實(shí)體字段是采用原生態(tài),還是采用駝峰寫(xiě)法轉(zhuǎn)換truetrue/false4.3.
代碼生成打開(kāi)代碼生成器并輸入相應(yīng)的參數(shù)如圖
41所示。圖
41
員工信息維護(hù)的代碼生成器執(zhí)行[生成]之后,可以在源代碼目錄src中看到新生成的java代碼文件,如圖
42所示。圖
42
生成的java文件同樣地,可以在WebRoot/webpage中看到新生成的jsp頁(yè)面,如圖
43所示。圖
43
生成的JSP文件
生成代碼結(jié)構(gòu)說(shuō)明
1.添加和修改頁(yè)面在一個(gè)JSP頁(yè)面中2.service層接口和實(shí)現(xiàn)都繼承父類(lèi)4.4.
功能測(cè)試4.4.1.
添加菜單并授權(quán)重新啟動(dòng)Tomcat,進(jìn)入系統(tǒng)主界面->系統(tǒng)管理->菜單管理,點(diǎn)擊菜單錄入,添加員工管理菜單,如圖
44所示。圖
44
員工管理的菜單添加菜單添加完成之后,需要將該菜單分配給管理員角色,再次刷新頁(yè)面,可以在系統(tǒng)管理模塊下看到子菜單[員工管理],如圖
45所示。圖
45
新增的員工管理菜單項(xiàng)4.4.2.
功能測(cè)試點(diǎn)擊菜單項(xiàng)[員工管理],打開(kāi)員工管理的主界面如圖
46所示。圖
46
員工管理主界面點(diǎn)擊[錄入]按鈕,在彈出的對(duì)話框中錄入員工基本信息,如圖
47所示。圖
47
員工信息錄入點(diǎn)擊確定按鈕,對(duì)信息進(jìn)行保存,此時(shí)可以在用戶列表中看到新錄入的信息,同時(shí)在數(shù)據(jù)庫(kù)中也可以看到數(shù)據(jù)被保存入庫(kù),如圖
48所示。圖
48
信息被正確保存入庫(kù)4.5.
代碼生成器使用規(guī)則4.5.1.
建表規(guī)范1.
表必須有唯一主鍵:
ID〔字符類(lèi)型
32位
備注:
主鍵采用UUID方式生成主鍵支持自定義,修改jeecg_perties的參數(shù)[jeecg_generate_table_id]即可;2.
表必需字段〔創(chuàng)建人,創(chuàng)建時(shí)間等..3.
表字段必須有注釋備注:
JSP頁(yè)面字段文本,是根據(jù)表字段注釋來(lái)生成4.
主表和子表的外鍵字段名字,必須相同〔除主鍵OBID外5.
子表引用主表主鍵OBID作為外鍵,外鍵字段必須以O(shè)BID結(jié)尾注:請(qǐng)按照建表模板表
42來(lái)創(chuàng)建新表,模板表中原有的字段,生成器會(huì)過(guò)濾不在頁(yè)面生成。表
42
建表模板IDvarchar36主鍵TURE其他字段..
CREATE_BYvarchar36創(chuàng)建人
CREATE_NAMEvarchar32創(chuàng)建人名字
CREATE_DATEdatetime0創(chuàng)建時(shí)間
UPDATE_BYvarchar36修改人
UPDATE_NAMEvarchar32修改人名字
UPDATE_DATEdatetime0修改時(shí)間
DELFLAGint2刪除標(biāo)記
DEL_DATEdatetime0刪除時(shí)間
4.5.2.
頁(yè)面生成規(guī)則說(shuō)明:JSP頁(yè)面字段的文本內(nèi)容,取表字段的注釋前6位字符<如果建表字段注釋為空,則頁(yè)面字段文本會(huì)為空>A.默認(rèn)生成的JSP頁(yè)面前五個(gè)字段為必須項(xiàng),其他字段為非必須輸入〔需要自己手工加B.數(shù)據(jù)庫(kù)字段類(lèi)型為:datetime
-->對(duì)應(yīng)頁(yè)面字段,會(huì)自動(dòng)追加[年月日-時(shí)分秒]時(shí)間控件C.數(shù)據(jù)庫(kù)字段類(lèi)型為:date
-->對(duì)應(yīng)頁(yè)面會(huì)字段,自動(dòng)追加[年月日]時(shí)間控件D.數(shù)據(jù)庫(kù)字段類(lèi)型為:Int/Number-->對(duì)應(yīng)頁(yè)面字段,會(huì)自動(dòng)追加數(shù)字校驗(yàn)〔不允許輸入小數(shù)E.數(shù)據(jù)庫(kù)字段類(lèi)型為:float/double/decimal-->對(duì)應(yīng)頁(yè)面頁(yè)面字段,會(huì)自動(dòng)追加數(shù)字校驗(yàn)〔允許輸入小數(shù)F.如果表字段為字符類(lèi)型,并且設(shè)置了長(zhǎng)度,頁(yè)面輸入框會(huì)自動(dòng)設(shè)置maxlength對(duì)應(yīng)表字段長(zhǎng)度5.
查詢(xún)HQL過(guò)濾器5.1.
數(shù)據(jù)過(guò)濾現(xiàn)狀分析項(xiàng)目開(kāi)發(fā)的查詢(xún)頁(yè)面都會(huì)有很多查詢(xún)條件,開(kāi)發(fā)追加查詢(xún)條件的工作繁瑣又很浪費(fèi)時(shí)間。這塊工作量主要在:頁(yè)面加查詢(xún)字段和后臺(tái)代碼邏輯判斷,追加查詢(xún)條件;目前JAVA持久層主流框架Hibernate和Ibatis實(shí)現(xiàn)方式分析:[1].Hibatente
技術(shù)實(shí)現(xiàn):A.頁(yè)面追加查詢(xún)字段;
B.后臺(tái)代碼需加邏輯判斷,判斷字段是否為空,手工拼SQL追加查詢(xún)條件;[2].IBATIS
技術(shù)實(shí)現(xiàn):A.頁(yè)面追加查詢(xún)字段;
B.后臺(tái)不需寫(xiě)代碼,但是需在XML文件中追加該字段非空判斷和查詢(xún)條件;特點(diǎn):常規(guī)功能的頁(yè)面查詢(xún)方式只能是"全匹配"和"模糊查詢(xún)",對(duì)于特殊的
"包含查詢(xún)"和"不匹配查詢(xún)",
只能寫(xiě)特殊邏輯代碼5.2.
查詢(xún)條件SQL生成器5.2.1.
實(shí)現(xiàn)原理根據(jù)頁(yè)面?zhèn)鬟f到后臺(tái)的參數(shù),動(dòng)態(tài)判斷字段是否為空,自動(dòng)拼SQL追加查詢(xún)條件。實(shí)現(xiàn)的功能:實(shí)現(xiàn)了"模糊查詢(xún)"
,
"包含查詢(xún)"
,
"不匹配查詢(xún)"
等SQL匹配功能。特點(diǎn):頁(yè)面僅僅追加一個(gè)查詢(xún)字段,后臺(tái)不需要寫(xiě)任何代碼,查詢(xún)功能自動(dòng)實(shí)現(xiàn)。5.2.2.
查詢(xún)規(guī)則要求:頁(yè)面查詢(xún)字段,需跟后臺(tái)Action<或Controller>中Page的字段對(duì)應(yīng)一致,后臺(tái)不需寫(xiě)代碼自動(dòng)生成HQL,追加查詢(xún)條件;默認(rèn)生成的查詢(xún)條件是全匹配;
查詢(xún)匹配方式分類(lèi):[1].全匹配查詢(xún):查詢(xún)數(shù)據(jù)沒(méi)有特殊格式,默認(rèn)為全匹配查詢(xún)[2].模糊查詢(xún):
查詢(xún)數(shù)據(jù)格式需加星號(hào)[*]
例如:{MD*/*MD*/*M*D*}[3].包含查詢(xún):
查詢(xún)數(shù)據(jù)格式采用逗號(hào)分隔[,]
例如:{01,03}<含義:in<'01','03'>>[4].不匹配查詢(xún):查詢(xún)數(shù)據(jù)格式需要加嘆號(hào)前綴[!]
例如:{!123}<含義:不等于123>特殊說(shuō)明:查詢(xún)不為Null的方法=!null<大小寫(xiě)沒(méi)關(guān)系>;查詢(xún)不為空字符串的方法=!<只有一個(gè)嘆號(hào)>.[5].時(shí)間范圍范圍查詢(xún)jsp
頁(yè)面中使用的name:需要查詢(xún)的日期類(lèi)型字段名本身〔什么都不加,表示查詢(xún)時(shí)查詢(xún)等于該字段時(shí)間的數(shù)據(jù)begin:需要查詢(xún)的日期類(lèi)型字段名〔首字母大寫(xiě),表示查詢(xún)開(kāi)始時(shí)間
查詢(xún)時(shí)查詢(xún)大于等于開(kāi)始時(shí)間的數(shù)據(jù)end:
需要查詢(xún)的日期類(lèi)型字段名〔首字母大寫(xiě),表示查詢(xún)結(jié)束時(shí)間查詢(xún)時(shí)查詢(xún)小于等于結(jié)束時(shí)間的數(shù)據(jù)使用舉例:字段名稱(chēng)
private
Date
birthday查詢(xún)開(kāi)始時(shí)間
beginBirthday查詢(xún)結(jié)束時(shí)間
endBirthday5.2.3.
具體實(shí)現(xiàn)第一步:頁(yè)面實(shí)現(xiàn)說(shuō)明:為dategrid字段,追加屬性
query="true",自動(dòng)加載出查詢(xún)框,如圖
51所示。圖
51
JSP代碼實(shí)現(xiàn)第二步:controller層處理Controller中對(duì)應(yīng)的處理邏輯如圖
52所示。圖
52
Controller代碼6.
表單校驗(yàn)組件ValidForm6.1.
Validform使用入門(mén)1、引入css請(qǐng)查看下載文件中的style.css,把里面Validform必須部分復(fù)制到你的css中〔文件里這個(gè)注釋"/*==========以下部分是Validform必須的===========*/"
之后的部分是必須的。<之前發(fā)現(xiàn)有部分網(wǎng)友把整個(gè)style.css都引用在了頁(yè)面里,然后發(fā)現(xiàn)樣式?jīng)_突了>2、引入js
〔jquery
1.4.2
以上版本都可以3、給需要驗(yàn)證的表單元素綁定附加屬性4、初始化,就這么簡(jiǎn)單注:1、Validform有非壓縮、壓縮和NCR三個(gè)版本提供下載,NCR是通用版,當(dāng)你頁(yè)面因編碼問(wèn)題,提示文字出現(xiàn)亂碼時(shí)可以使用這個(gè)版本;2、Validform沒(méi)有限定必須使用table結(jié)構(gòu),它可以適用于任何結(jié)構(gòu),需要在tiptype中定義好位置關(guān)系。6.2.
綁定附加屬性凡要驗(yàn)證格式的元素均需綁定datatype屬性,datatype可選值內(nèi)置有10類(lèi),用來(lái)指定不同的驗(yàn)證格式。如果還不能滿足您的驗(yàn)證需求,可以傳入自定義datatype,自定義datatype是一個(gè)非常強(qiáng)大的功能,通過(guò)它可以滿足你的任何需求??梢越壎ǖ母郊訉傩杂校篸atatype、nullmsg、sucmsg、errormsg、ignore、recheck、tip、altercss、ajaxurl
和
plugin等。綁定方法如下所示:說(shuō)明:內(nèi)置基本的datatype類(lèi)型有:
*
|
*6-16
|
n
|
n6-16
|
s
|
s6-18
|
p
|
m
|
e
|
url*:檢測(cè)是否有輸入,可以輸入任何字符,不留空即可通過(guò)驗(yàn)證;*6-16:檢測(cè)是否為6到16位任意字符;n:數(shù)字類(lèi)型;n6-16:6到16位數(shù)字;s:字符串類(lèi)型;s6-18:6到18位字符串;p:驗(yàn)證是否為郵政編碼;m:手機(jī)號(hào)碼格式;e:email格式;url:驗(yàn)證字符串是否為網(wǎng)址。自定義datatype的名稱(chēng),可以由字母、數(shù)字、下劃線、中劃線和*號(hào)組成。形如"*6-16"的datatype,Validform會(huì)自動(dòng)擴(kuò)展,可以指定任意的數(shù)值范圍。如內(nèi)置基本類(lèi)型有"*6-16",那么你綁定datatype="*4-12"就表示4到12位任意字符。如果你自定義了一個(gè)datatype="zh2-4",表示2到4位中文字符,那么datatype="zh2-6"就表示2到6位中文字符。5.2版本之后,datatype支持規(guī)則累加或單選。用","分隔表示規(guī)則累加;用"|"分隔表示規(guī)則多選一,即只要符合其中一個(gè)規(guī)則就可以通過(guò)驗(yàn)證,綁定的規(guī)則會(huì)依次驗(yàn)證,只要驗(yàn)證通過(guò),后面的規(guī)則就會(huì)忽略不再比較。如綁定datatype="m|e",表示既可以填寫(xiě)手機(jī)號(hào)碼,也能填寫(xiě)郵箱地址,如果知道填入的是手機(jī)號(hào)碼,那么就不會(huì)再檢測(cè)他是不是郵箱地址;datatype="zh,s2-4",表示要符合自定義類(lèi)型"zh",也要符合規(guī)則"s2-4"。注:版本之后,datatype支持:直接綁定正則:如可用這樣寫(xiě)datatype="/\w{3,6}/i",要求是3到6位的字母,不區(qū)分大小寫(xiě);支持簡(jiǎn)單的邏輯運(yùn)算:如datatype="m
|
e,
*4-18
|
/\w{3,6}/i
|
/^validform\.rjboy\.cn$/",這個(gè)表達(dá)式的意思是:可以是手機(jī)號(hào)碼;或者是郵箱地址,但字符長(zhǎng)度必須在4到18位;或者是3到6位的字母,不區(qū)分大小寫(xiě);或者輸入,區(qū)分大小寫(xiě)。這里","分隔相當(dāng)于邏輯運(yùn)算里的"&&";"|"分隔相當(dāng)于邏輯運(yùn)算里的"||";不支持括號(hào)運(yùn)算。nullmsg當(dāng)表單元素值為空時(shí)的提示信息,不綁定,默認(rèn)提示"請(qǐng)?zhí)钊胄畔ⅲ?。如:nullmsg="請(qǐng)?zhí)顚?xiě)用戶名!"5.3版開(kāi)始,對(duì)于沒(méi)有綁定nullmsg的對(duì)象,會(huì)自動(dòng)查找class為Validform_label下的文字作為提示文字:如這樣的html結(jié)構(gòu):<span
class="Validform_label">*用戶名:</span><input
type="text"
val=""
datatype="s"
/>當(dāng)這個(gè)文本框里沒(méi)有輸入時(shí)的出錯(cuò)信息就會(huì)是:"請(qǐng)輸入用戶名!"這里Validform_label跟input之間的位置關(guān)系,不一定是要同級(jí)關(guān)系,同級(jí)里沒(méi)有找到的話,它還會(huì)在同級(jí)的子級(jí)、父級(jí)的同級(jí)、父級(jí)的同級(jí)的子級(jí)里查找。sucmsg
5.3+當(dāng)表單元素通過(guò)驗(yàn)證時(shí)的提示信息,不綁定,默認(rèn)提示"通過(guò)信息驗(yàn)證!"。如:sucmsg="用戶名還未被使用,可以注冊(cè)!"5.3版開(kāi)始,也可以在實(shí)時(shí)驗(yàn)證返回的json數(shù)據(jù)里返回成功的提示文字,請(qǐng)查看附加屬性ajaxurl的介紹。errormsg輸入內(nèi)容不能通過(guò)驗(yàn)證時(shí)的提示信息,默認(rèn)提示"請(qǐng)輸入正確信息!"。如:errormsg="用戶名必須是2到4位中文字符!"5.3版開(kāi)始,Validform可以根據(jù)你綁定的datatype智能的輸出相應(yīng)出錯(cuò)信息,具體介紹請(qǐng)查看tipmsgignore綁定了ignore="ignore"的表單元素,在有輸入時(shí),會(huì)驗(yàn)證所填數(shù)據(jù)是否符合datatype所指定數(shù)據(jù)類(lèi)型,沒(méi)有填寫(xiě)內(nèi)容時(shí)則會(huì)忽略對(duì)它的驗(yàn)證;recheck表單里面經(jīng)常需要檢查兩次密碼輸入是否一致,recheck就是用來(lái)指定需要比較的另外一個(gè)表單元素。
如:recheck="password1",那么它就會(huì)拿當(dāng)前元素的值跟該表單下,name為"password1"的元素比較。tip表單里經(jīng)常有些文本框需要默認(rèn)就顯示一個(gè)灰色的提示文字,當(dāng)獲得焦點(diǎn)時(shí)提示文字消失,失去焦點(diǎn)時(shí)提示文字顯示。tip屬性就是用來(lái)實(shí)現(xiàn)這個(gè)效果。它通常和altercss搭配使用。如<input
type="text"
value="默認(rèn)提示文字"
class="gray
intxt"
tip="默認(rèn)提示文字"
altercss="gray"
/>altercss它需要和tip屬性配合使用,altercss指定的樣式名,會(huì)在文本框獲得焦點(diǎn)時(shí)被刪除,沒(méi)有輸入內(nèi)容而失去焦點(diǎn)時(shí)重新加上。ajaxurl指定ajax實(shí)時(shí)驗(yàn)證的后臺(tái)文件的地址。后臺(tái)頁(yè)面如valid.php文件中可以用$_POST["param"]
接收到值,Ajax中會(huì)POST過(guò)來(lái)變量param和name。param是文本框的值,name是文本框的name屬性。5.2版本開(kāi)始,可以在ajaxurl指定的url后綁定參數(shù),如:ajaxurl="valid.php?myparam1=value1&myparam2=value2";5.3之前的版本中,該文件輸出的字符會(huì)作為錯(cuò)誤信息顯示在頁(yè)面上,如果驗(yàn)證通過(guò)需輸出小寫(xiě)字母"y"。在5.3版中,實(shí)時(shí)驗(yàn)證的返回?cái)?shù)據(jù)做了調(diào)整,須是含有status值的json數(shù)據(jù)!跟callback里的ajax返回?cái)?shù)據(jù)格式統(tǒng)一,建議不再返回字符串"y"或"n"。目前這兩種格式的數(shù)據(jù)都兼容。注:
如果ajax校驗(yàn)通過(guò),會(huì)在該元素上綁定validform_valid值為true??梢酝ㄟ^(guò)設(shè)置該值來(lái)控制驗(yàn)證能不能通過(guò),如驗(yàn)證碼的驗(yàn)證,第一次驗(yàn)證通過(guò)后,不小心右點(diǎn)擊了下驗(yàn)證碼圖片,驗(yàn)證碼換了,但是仍然指示這個(gè)對(duì)象已經(jīng)通過(guò)了驗(yàn)證,這時(shí)可以手動(dòng)調(diào)整該值:$<"#name">[0].validform_valid="false"。怎樣設(shè)置ajax的參數(shù),具體可以查看Validform對(duì)象的config方法。plugin指定需要使用的插件。5.3版開(kāi)始,對(duì)于日期、swfupload和密碼強(qiáng)度檢測(cè)這三個(gè)插件,綁定了plugin屬性即可以初始化對(duì)應(yīng)的插件,可以不用在validform初始化時(shí)傳入空的usePlugin了。如,你要使用日期插件,5.3之前版本需要這樣初始化:$<".demoform">.Validform<{
usePlugin:{
datepicker:{}
}}>;5.3版開(kāi)始,不需要傳入這些空對(duì)象了,只需在表單元素上綁定plugin="datepicker"就可以,初始化直接這樣:$<".demoform">.Validform<>;6.3.
初始化參數(shù)說(shuō)明所有可用的參數(shù)如下:
$<".demoform">.Validform<{
btnSubmit:"#btn_sub",
btnReset:".btn_reset",
tiptype:1,
ignoreHidden:false,
dragonfly:false,
tipSweep:true,
showAllError:false,
postonce:true,
ajaxPost:true,
datatype:{
"*6-20":
/^[^\s]{6,20}$/,
"z2-4"
:
/^[\u4E00-\u9FA5\uf900-\ufa2d]{2,4}$/,
"username":function<gets,obj,curform,regxp>{
//參數(shù)gets是獲取到的表單元素值,obj為當(dāng)前表單元素,curform為當(dāng)前驗(yàn)證的表單,regxp為內(nèi)置的一些正則表達(dá)式的引用;
var
reg1=/^[\w\.]{4,16}$/,
reg2=/^[\u4E00-\u9FA5\uf900-\ufa2d]{2,8}$/;
if<reg1.test<gets>>{return
true;}
if<reg2.test<gets>>{return
true;}
return
false;
//注意return可以返回true
或
false
或
字符串文字,true表示驗(yàn)證通過(guò),返回字符串表示驗(yàn)證失敗,字符串作為錯(cuò)誤提示顯示,返回false則用errmsg或默認(rèn)的錯(cuò)誤提示;
},
"phone":function<>{
//
5.0
版本之后,要實(shí)現(xiàn)二選一的驗(yàn)證效果,datatype
的名稱(chēng)
不
需要以
"option_"
開(kāi)頭;
}
},
usePlugin:{
swfupload:{},
datepicker:{},
passwordstrength:{},
jqtransform:{
selector:"select,input"
}
},
beforeCheck:function<curform>{
//在表單提交執(zhí)行驗(yàn)證之前執(zhí)行的函數(shù),curform參數(shù)是當(dāng)前表單對(duì)象。
//這里明確return
false的話將不會(huì)繼續(xù)執(zhí)行驗(yàn)證操作;
},
beforeSubmit:function<curform>{
//在驗(yàn)證成功后,表單提交前執(zhí)行的函數(shù),curform參數(shù)是當(dāng)前表單對(duì)象。
//這里明確return
false的話表單將不會(huì)提交;
},
callback:function<data>{
//返回?cái)?shù)據(jù)data是json格式,{"info":"demo
info","status":"y"}
//info:
輸出提示信息;
//status:
返回提交數(shù)據(jù)的狀態(tài),是否提交成功。如可以用"y"表示提交成功,"n"表示提交失敗,在ajax_post.php文件返回?cái)?shù)據(jù)里自定字符,主要用在callback函數(shù)里根據(jù)該值執(zhí)行相應(yīng)的回調(diào)操作;
//你也可以在ajax_post.php文件返回更多信息在這里獲取,進(jìn)行相應(yīng)操作;
//ajax遇到服務(wù)端錯(cuò)誤時(shí)也會(huì)執(zhí)行回調(diào),這時(shí)的data是{
status:**,
statusText:**,
readyState:**,
responseText:**
};
//這里執(zhí)行回調(diào)操作;
//注意:如果不是ajax方式提交表單,傳入callback,這時(shí)data參數(shù)是當(dāng)前表單對(duì)象,回調(diào)函數(shù)會(huì)在表單驗(yàn)證全部通過(guò)后執(zhí)行,然后判斷是否提交表單,如果callback里明確return
false,則表單不會(huì)提交,如果return
true或沒(méi)有return,則會(huì)提交表單。
}}>;參數(shù)說(shuō)明:[所有參數(shù)均為可選項(xiàng)]必須是表單對(duì)象執(zhí)行Validform方法,示例中".demoform"就是綁定在form元素上的class名稱(chēng);btnSubmit指定當(dāng)前表單下的哪一個(gè)按鈕觸發(fā)表單提交事件,如果表單下有submit按鈕時(shí)可以省略該參數(shù)。示例中".btn_sub"是該表單下要綁定點(diǎn)擊提交表單事件的按鈕;btnReset".btn_reset"是該表單下要綁定點(diǎn)擊重置表單事件的按鈕;tiptype可用的值有:1、2、3、4和function函數(shù),默認(rèn)tiptype為1。<
3、4是版本新增>1=>
自定義彈出框提示;2=>
側(cè)邊提示<會(huì)在當(dāng)前元素的父級(jí)的next對(duì)象的子級(jí)查找顯示提示信息的對(duì)象,表單以ajax提交時(shí)會(huì)彈出自定義提示框顯示表單提交狀態(tài)>;3=>
側(cè)邊提示<會(huì)在當(dāng)前元素的siblings對(duì)象中查找顯示提示信息的對(duì)象,表單以ajax提交時(shí)會(huì)彈出自定義提示框顯示表單提交狀態(tài)>;4=>
側(cè)邊提示<會(huì)在當(dāng)前元素的父級(jí)的next對(duì)象下查找顯示提示信息的對(duì)象,表單以ajax提交時(shí)不顯示表單的提交狀態(tài)>;如果上面的4種提示方式不是你需要的,你可以給tiptype傳入自定義函數(shù)。通過(guò)自定義函數(shù),可以實(shí)現(xiàn)你想要的任何提示效果:tiptype:function<msg,o,cssctl>{
//msg:提示信息;
//o:{obj:*,type:*,curform:*},
//obj指向的是當(dāng)前驗(yàn)證的表單元素〔或表單對(duì)象,驗(yàn)證全部驗(yàn)證通過(guò),提交表單時(shí)o.obj為該表單對(duì)象,//type指示提示的狀態(tài),值為1、2、3、4,1:正在檢測(cè)/提交數(shù)據(jù),2:通過(guò)驗(yàn)證,3:驗(yàn)證失敗,4:提示ignore狀態(tài),
//curform為當(dāng)前form對(duì)象;//cssctl:內(nèi)置的提示信息樣式控制函數(shù),該函數(shù)需傳入兩個(gè)參數(shù):顯示提示信息的對(duì)象和當(dāng)前提示的狀態(tài)〔既形參o中的type;}具體參見(jiàn)demo頁(yè)。tiptype不為1時(shí),Validform會(huì)查找class為"Validform_checktip"的標(biāo)簽顯示提示信息。tiptype=1時(shí),會(huì)自動(dòng)創(chuàng)建彈出框顯示提示信息。Validform_checktip和表單元素之間的位置關(guān)系,會(huì)根據(jù)tiptype的值有對(duì)應(yīng)的結(jié)構(gòu),上面已經(jīng)做了說(shuō)明。5.3版本開(kāi)始,如果頁(yè)面里沒(méi)有顯示出錯(cuò)信息的標(biāo)簽,會(huì)根據(jù)tiptype值自動(dòng)創(chuàng)建Validform_checktip對(duì)象。ignoreHidden可用值:
true
|
false。默認(rèn)為false,當(dāng)為true時(shí)對(duì):hidden的表單元素將不做驗(yàn)證;dragonfly可用值:
true
|
false。默認(rèn)false,當(dāng)為true時(shí),值為空時(shí)不做驗(yàn)證;tipSweep可用值:
true
|
false。默認(rèn)為false,5.3版中做了修正,在各種tiptype下,為true時(shí)提示信息將只會(huì)在表單提交時(shí)觸發(fā)顯示,各表單元素blur時(shí)不會(huì)觸發(fā)信息提示;showAllError可用值:
true
|
false。默認(rèn)為false,true:提交表單時(shí)所有錯(cuò)誤提示信息都會(huì)顯示;false:一碰到驗(yàn)證不通過(guò)的對(duì)象就會(huì)停止檢測(cè)后面的元素,只顯示該元素的錯(cuò)誤信息;postonce可用值:
true
|
false。默認(rèn)為false,指定是否開(kāi)啟二次提交防御,true開(kāi)啟,不指定則默認(rèn)關(guān)閉;為true時(shí),在數(shù)據(jù)成功提交后,表單將不能再繼續(xù)提交。ajaxPost可用值:
true
|
false。默認(rèn)為false,使用ajax方式提交表單數(shù)據(jù),將會(huì)把數(shù)據(jù)POST到config方法或表單action屬性里設(shè)定的地址;datatype傳入自定義datatype類(lèi)型,可以是正則,也可以是函數(shù)。datatyp:{
"zh2-4":/^[\u4E00-\u9FA5\uf900-\ufa2d]{2,4}$/,
"phone":function<gets,obj,curform,regxp>{
//參數(shù)gets是獲取到的表單元素值,
//obj為當(dāng)前表單元素,
//curform為當(dāng)前驗(yàn)證的表單,
//regxp為內(nèi)置的一些正則表達(dá)式的引用。
//return
false表示驗(yàn)證出錯(cuò),沒(méi)有return或者return
true表示驗(yàn)證通過(guò)。
}}具體示例請(qǐng)參考demo頁(yè);usePlugin目前已整合swfupload、datepicker、passwordstrength和jqtransform四個(gè)插件,在這里傳入這些插件使用時(shí)需要傳入的參數(shù)。datepicker在Validform內(nèi)調(diào)用時(shí)另外擴(kuò)展了幾個(gè)比較實(shí)用的參數(shù),具體請(qǐng)參考demo頁(yè);beforeCheck<curform>在表單提交執(zhí)行驗(yàn)證之前執(zhí)行的函數(shù),curform參數(shù)獲取到的是當(dāng)前表單對(duì)象。
函數(shù)return
false的話將不會(huì)繼續(xù)執(zhí)行驗(yàn)證操作;beforeSubmit<curform>在表單驗(yàn)證通過(guò),提交表單數(shù)據(jù)之前執(zhí)行的函數(shù),data參數(shù)是當(dāng)前表單對(duì)象。
函數(shù)return
false的話表單將不會(huì)提交;callback在使用ajax提交表單數(shù)據(jù)時(shí),數(shù)據(jù)提交后的回調(diào)函數(shù)。返回?cái)?shù)據(jù)data是Json格式:
{"info":"demo
info","status":"y"}info:
輸出提示信息,status:
返回提交數(shù)據(jù)的狀態(tài),是否提交成功,"y"表示提交成功,"n"表示提交失敗,在ajax_post.php文件返回?cái)?shù)據(jù)里自定字符,主要用在callback函數(shù)里根據(jù)該值執(zhí)行相應(yīng)的回調(diào)操作。你也可以在ajax_post.php文件返回更多信息在這里獲取,進(jìn)行相應(yīng)操作;如果不是ajax方式提交表單,傳入callback,這時(shí)data參數(shù)是當(dāng)前表單對(duì)象,回調(diào)函數(shù)會(huì)在表單驗(yàn)證全部通過(guò)后執(zhí)行,然后判斷是否提交表單,如果callback里return
false,則表單不會(huì)提交,如果return
true或沒(méi)有return,則會(huì)提交表單。5.3版開(kāi)始,ajax遇到服務(wù)端錯(cuò)誤時(shí)也會(huì)執(zhí)行回調(diào),這時(shí)的data是{
status:**,
statusText:**,
readyState:**,
responseText:**
}6.4.
Validform對(duì)象[方法支持鏈?zhǔn)秸{(diào)用]如示例var
demo=$<".formsub">.Validform<>,那么demo對(duì)象會(huì)有以下屬性和方法可以調(diào)用:tipmsg[object]如:demo.tipmsg.s="error!
no
message
inputed.";通過(guò)該對(duì)象可以修改除
tit
以外的其他提示文字,這樣可以實(shí)現(xiàn)同一個(gè)頁(yè)面的不同表單使用不同的提示文字。具體可修改的提示文字$.Tipmsg={//默認(rèn)提示文字;
tit:"提示信息",
w:{
"*":"不能為空!",
"*6-16":"請(qǐng)?zhí)顚?xiě)6到16位任意字符!",
"n":"請(qǐng)?zhí)顚?xiě)數(shù)字!",
"n6-16":"請(qǐng)?zhí)顚?xiě)6到16位數(shù)字!",
"s":"不能輸入特殊字符!",
"s6-18":"請(qǐng)?zhí)顚?xiě)6到18位字符!",
"p":"請(qǐng)?zhí)顚?xiě)郵政編碼!",
"m":"請(qǐng)?zhí)顚?xiě)手機(jī)號(hào)碼!",
"e":"郵箱地址格式不對(duì)!",
"url":"請(qǐng)?zhí)顚?xiě)網(wǎng)址!"
},def:"請(qǐng)?zhí)顚?xiě)正確信息!",
undef:"datatype未定義!",
reck:"兩次輸入的內(nèi)容不一致!",
r:"通過(guò)信息驗(yàn)證!",
c:"正在檢測(cè)信息…",
s:"請(qǐng)?zhí)钊胄畔ⅲ?,
s_auto:"請(qǐng){填寫(xiě)}{0}!",
v:"所填信息沒(méi)有經(jīng)過(guò)驗(yàn)證,請(qǐng)稍后…",
p:"正在提交數(shù)據(jù)…"
};要修改tit〔彈出框的標(biāo)題文字的話,可以這樣:$.Tipmsg.tit="Message
Box",則彈出框的標(biāo)題文字會(huì)換成"Message
Box"。注:5.3+$.Tipmsg.w里,形如"*6-16"的提示文字,里面的數(shù)字是會(huì)被替換的。如綁定datatype="*2-18",那它默認(rèn)的出錯(cuò)信息就會(huì)是"請(qǐng)?zhí)顚?xiě)2到18位任意字符!",可以通過(guò)$.Tipmsg.w這個(gè)對(duì)象修改和擴(kuò)展默認(rèn)錯(cuò)誤信息,如果你已經(jīng)設(shè)置了"zh2-4"的提示信息是"2-4位中文",那么"zh2-8"出錯(cuò)的信息就自動(dòng)會(huì)是:"2-8位中文"。對(duì)于自定義的datatype,在擴(kuò)展默認(rèn)信息時(shí),注意錯(cuò)誤信息的名字要跟datatype名字一樣,如上面示例是:$.Tipmsg.w["zh2-4"]="2-4位中文"。對(duì)于多頁(yè)面或一個(gè)頁(yè)面多表單有相同datatype來(lái)說(shuō),在$.Tipmsg.w中擴(kuò)展默認(rèn)提示信息是個(gè)很好的選擇。目前只能通過(guò)$.Tipmsg.w擴(kuò)展,還不能使用Validform對(duì)象的tipmsg屬性來(lái)擴(kuò)展。$.Tipmsg.s_auto是用來(lái)指定在沒(méi)有綁定nullmsg,且指定了標(biāo)簽Validform_label時(shí)的默認(rèn)提示信息。"{0}"是會(huì)被找到的Validform_label里的文字替換掉的,"{填寫(xiě)}"里的文字在綁定了"recheck"屬性的表單元素上檢測(cè)時(shí)是會(huì)不顯示的。具體示例請(qǐng)參見(jiàn)demo頁(yè)。dataType[object]獲取內(nèi)置的一些正則:{
"match":/^<.+?><\d+>-<\d+>$/,
"*":/[\w\W]+/,
"*6-16":/^[\w\W]{6,16}$/,
"n":/^\d+$/,
"n6-16":/^\d{6,16}$/,
"s":/^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]+$/,
"s6-18":/^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]{6,18}$/,
"p":/^[0-9]{6}$/,
"m":/^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}$|18[0-9]{9}$/,
"e":/^\w+<[-+.']\w+>*@\w+<[-.]\w+>*\.\w+<[-.]\w+>*$/,
"url":/^<\w+:\/\/>?\w+<\.\w+>+.*$/
}addRule<rule>[返回值:Validform]可以通過(guò)Validform對(duì)象的這個(gè)方法來(lái)給表單元素綁定驗(yàn)證規(guī)則,綁定驗(yàn)證類(lèi)型中列出的附加屬性都可以通過(guò)這個(gè)方法綁定。demo.addRule<[
{
ele:"#name",
datatype:"s6-18",
ajaxurl:"valid.php",
nullmsg:"請(qǐng)輸入昵稱(chēng)!",
errormsg:"昵稱(chēng)至少6個(gè)字符,最多18個(gè)字符!"
},
{
ele:"#userpassword",
datatype:"*6-16",
nullmsg:"請(qǐng)?jiān)O(shè)置密碼!",
errormsg:"密碼范圍在6~16位之間!"
},
{
ele:"#userpassword2",
datatype:"*",
recheck:"userpassword",
nullmsg:"請(qǐng)?jiān)佥斎胍淮蚊艽a!",
errormsg:"您兩次輸入的賬號(hào)密碼不一致!"
}
]>;其中ele是指定要綁定規(guī)則的對(duì)象,會(huì)在Validform對(duì)象下查找這些對(duì)象。eq<n>[返回值:Validform]獲取Validform對(duì)象的第n個(gè)元素。如你頁(yè)面上有多個(gè)form的class都是formsub,執(zhí)行上面的驗(yàn)證綁定,得到的demo對(duì)象就可以操作所有這些表單,如果你要對(duì)其中某個(gè)表單執(zhí)行某些操作,那么就可以使用這個(gè)方法。如demo.eq<0>.resetForm<>,重置第一個(gè)表單。ajaxPost<flag,sync,url>[返回值:Validform]以ajax方式提交表單。flag為true時(shí),跳過(guò)驗(yàn)證直接提交,sync為true時(shí)將以同步的方式進(jìn)行ajax提交。參數(shù)url是5.3版新增,傳入了url地址時(shí),表單會(huì)提交到這個(gè)地址如demo.ajaxPost<true>,不做驗(yàn)證直接ajax提交表單。abort<>[返回值:Validform]終止ajax的提交。如執(zhí)行上面的ajaxPost<>之后,發(fā)現(xiàn)某些項(xiàng)填寫(xiě)不對(duì),想取消表單提交,那么就可以執(zhí)行這個(gè)操作:demo.abort<>submitForm<flag,url>[返回值:Validform]以初始化時(shí)傳入?yún)?shù)的設(shè)置方式提交表單,flag為true時(shí),跳過(guò)驗(yàn)證直接提交。參數(shù)url是5.3版新增,傳入了url地址時(shí),表單會(huì)提交到這個(gè)地址如demo.submitForm<true>,不做驗(yàn)證直接提交表單。resetForm<>[返回值:Validform]重置表單。如demo.resetForm<>,重置表單到初始狀態(tài)。resetStatus<>[返回值:Validform]重置表單的提交狀態(tài)。傳入了postonce參數(shù)的話,表單成功提交后狀態(tài)會(huì)設(shè)置為"posted",重置提交狀態(tài)可以讓表單繼續(xù)可以提交。如demo.resetStatus<>getStatus<>[返回值:String]獲取表單的提交狀態(tài),normal:未提交,posting:正在提交,posted:已成功提交過(guò)。如demo.getStatus<>setStatus<status>[返回值:Validform]設(shè)置表單的提交狀態(tài),可以設(shè)置normal,posting,posted三種狀態(tài),不傳參則設(shè)置狀態(tài)為posting,這個(gè)狀態(tài)表單可以驗(yàn)證,但不能提交。如demo.setStatus<"posted">ignore<selector>[返回值:Validform]忽略對(duì)所選擇對(duì)象的驗(yàn)證,不傳入selector則忽略所有表單元素。如demo.ignore<"select,textarea,#name">,忽略Validform對(duì)象下所有select,textarea及一個(gè)id為"name"元素的驗(yàn)證。unignore<selector>[返回值:Validform]將ignore方法所忽略驗(yàn)證的對(duì)象重新獲取驗(yàn)證效果,不傳入selector則恢復(fù)驗(yàn)證所有表單元素。如demo.unignore<"select,textarea,#name">,恢復(fù)Validform對(duì)象下所有select,textarea及一個(gè)id為"name"元素的驗(yàn)證。check<bool,selector>[返回值:Boolean]bool為true時(shí)則只驗(yàn)證不顯示提示信息對(duì)指定對(duì)象進(jìn)行驗(yàn)證<默認(rèn)驗(yàn)證當(dāng)前整個(gè)表單>,通過(guò)返回true,否則返回false〔綁定實(shí)時(shí)驗(yàn)證的對(duì)象,格式符合要求時(shí)返回true,而不會(huì)等ajax的返回結(jié)果如demo.check<>,驗(yàn)證當(dāng)前整個(gè)表單,且只驗(yàn)證但不顯示對(duì)錯(cuò)信息。config<setup>
5.3+
[返回值:Validform]setup參數(shù)是一個(gè)對(duì)象。如:demo.config<{
url:"這里指定提交地址",
ajaxpost:{
//可以傳入$.ajax<>能使用的,除dataType外的所有參數(shù);
},
ajaxurl:{
//可以傳入$.ajax<>能使用的,除dataType外的所有參數(shù);
}
}>可用參數(shù):url:指定表單的提交路徑,這里指定的路徑會(huì)覆蓋表單action屬性所指定的路徑ajaxpost:表單以ajax提交時(shí),可以在這里配置ajax的參數(shù)ajaxurl:配置實(shí)時(shí)驗(yàn)證ajax的參數(shù)<1>
執(zhí)行config可以動(dòng)態(tài)設(shè)置、添加參數(shù),如:demo.config<{
url:""
}>;
$<".save">.click<function<>{
demo.config<{
ajaxpost:{
timeout:1000
}
}>;
}>;那么在點(diǎn)擊save按鈕后,demo所對(duì)應(yīng)的表單的配置為:config={
url:"",
ajaxpost:{
timeout:1000
}
}<2>
參數(shù)url的優(yōu)先級(jí):form表單的action所指定的提交地址會(huì)被config.url覆蓋,config.url會(huì)被覆蓋,會(huì)被Validform對(duì)象的方法submitForm<flag,url>和ajaxPost<flag,sync,url>里的url覆蓋。如果表單里沒(méi)有指定action提交地址,那么就會(huì)提交到config.url設(shè)定的地址。<3>
考慮到整個(gè)驗(yàn)證框架的邏輯,傳入dataType參數(shù)不會(huì)起作用,不會(huì)被覆蓋,ajax必須返回含有status值的json數(shù)據(jù)。另外注意的是:傳入的success和error方法里,能多獲取到一個(gè)參數(shù),如:demo.config={
ajaxpost:{
url:"",
timeout:1000,
...,
success:function<data,obj>{
//data是返回的json數(shù)據(jù);
//obj是當(dāng)前表單的jquery對(duì)象;
},
error:function<data,obj>{
//data是{
status:**,
statusText:**,
readyState:**,
responseText:**
};
//obj是當(dāng)前表單的jquery對(duì)象;
}
},
ajaxurl:{
success:function<data,obj>{
//data是返回的json數(shù)據(jù);
//obj是當(dāng)前正做實(shí)時(shí)驗(yàn)證表單元素的jquery對(duì)象;
//注意:5.3版中,實(shí)時(shí)驗(yàn)證的返回?cái)?shù)據(jù)須是含有status值的json數(shù)據(jù)!
//跟callback里的ajax返回?cái)?shù)據(jù)格式統(tǒng)一,建議不再返回字符串"y"或"n"。目前這兩種格式的數(shù)據(jù)都兼容。
}
}
}6.5.
調(diào)用外部插件文件上傳
-swfupload選擇文件后立即上傳表單驗(yàn)證通過(guò)后上傳文件密碼強(qiáng)度檢測(cè)
-passwordStrength密碼強(qiáng)度提示與驗(yàn)證提示同時(shí)顯示在符合驗(yàn)證要求時(shí)才有密碼強(qiáng)度提示日期控件
-datePicker默認(rèn)效果選擇日期后執(zhí)行回調(diào)函數(shù)表單美化
-jqtransform默認(rèn)對(duì)所有元素美化美化指定的表單元素6.6.
Validform的公用對(duì)象$.Datatype可以通過(guò)$.Datatype對(duì)象來(lái)擴(kuò)展datatype類(lèi)型。如$.Datatype.zh=/^[\u4E00-\u9FA5\uf900-\ufa2d]{1,}$/$.Tipmsg可以通過(guò)$.Tipmsg對(duì)象來(lái)修改默認(rèn)提示文字。具體可修改的提示文字請(qǐng)查看Validform對(duì)象的tipmsg屬性。如果Validform對(duì)象的tipmsg屬性沒(méi)有找到相關(guān)的提示信息,那么就會(huì)到$.Tipmsg中查找對(duì)應(yīng)提示文字。如$.Tipmsg.tit="msg
box";
//設(shè)置默認(rèn)彈出框的標(biāo)題文字。$.Showmsg<msg>調(diào)用Validform自定義的彈出框。參數(shù)msg是要顯示的提示文字。如$.Showmsg<"這是提示文字">;
//如果不傳入信息則不會(huì)有彈出框出現(xiàn),像$.Showmsg<>這樣是不會(huì)彈出提示框的。$.Hidemsg<>關(guān)閉Validform自定義的彈出框。如$.Hidemsg<>7.
基礎(chǔ)用戶權(quán)限7.1.
權(quán)限設(shè)計(jì)基本概念權(quán)限管理模塊涉及到的實(shí)體有:用戶、角色和系統(tǒng)資源<包括系統(tǒng)菜單、頁(yè)面按鈕等>。用戶可以擁有多個(gè)角色,角色可以被分配給多個(gè)用戶。而權(quán)限的意思就是對(duì)某個(gè)資源的某個(gè)操作.一般通用的權(quán)限管理模塊規(guī)定:所謂資源即應(yīng)用系統(tǒng)中提供的要進(jìn)行鑒權(quán)才能訪問(wèn)的資源<比如各類(lèi)數(shù)據(jù),系統(tǒng)菜單>;所謂操作即增加、修改、刪除、查詢(xún)等操作。權(quán)限模型用戶權(quán)限模型,指的是用來(lái)表達(dá)用戶信息及用戶權(quán)限信息的數(shù)據(jù)模型。即能證明"你是誰(shuí)?"、"你能訪問(wèn)哪些受保護(hù)資源?"。
用戶與角色之間構(gòu)成多對(duì)多關(guān)系。表示同一個(gè)用戶可以擁有多個(gè)角色,一個(gè)角色可以被多個(gè)用戶所擁有。角色與資源之間構(gòu)成多對(duì)多關(guān)系。表示同一個(gè)資源可以被多個(gè)角色訪問(wèn),一個(gè)角色可以訪問(wèn)多個(gè)資源。權(quán)限設(shè)計(jì)模型如圖
71所示。圖
71
權(quán)限設(shè)計(jì)模型7.2.
權(quán)限設(shè)計(jì)目標(biāo)權(quán)限設(shè)計(jì)及權(quán)限管理的目標(biāo)包括:1>
對(duì)用戶授予相應(yīng)的角色2>
對(duì)角色授予不同的菜單3>
對(duì)角色授予不同的操作按鈕權(quán)限4>
進(jìn)行數(shù)據(jù)級(jí)別的權(quán)限控制〔行級(jí)別、列級(jí)別
目前已經(jīng)實(shí)現(xiàn)前兩項(xiàng)的權(quán)限設(shè)計(jì)目標(biāo),后兩項(xiàng)的權(quán)限控制正在開(kāi)發(fā)中。7.3.
目前系統(tǒng)設(shè)計(jì)7.3.1.
數(shù)據(jù)表t_s_user[用戶權(quán)限]系統(tǒng)用戶表t_s_base_user[用戶權(quán)限]系統(tǒng)用戶父類(lèi)表t_s_role[用戶權(quán)限]角色t_s_role_user[用戶權(quán)限]用戶角色t_s_depart[用戶權(quán)限]部門(mén)機(jī)構(gòu)表t_s_role_function[用戶權(quán)限]角色權(quán)限表t_s_operation[用戶權(quán)限]操作權(quán)限表t_s_function[用戶權(quán)限]菜單權(quán)限表7.3.2.
頁(yè)面菜單權(quán)限管理的相關(guān)菜單如圖
72所示。圖
72
權(quán)限菜單8.
JEECG
注意規(guī)則1.
列表頁(yè)面,datagrid的name屬性不允許存在重復(fù)的,否則頁(yè)面顯示白板:<t:dategrid
name="jeecgDemoList"
title="開(kāi)發(fā)DEMO列表"
actionUrl="jeecgDemoController.do?datagrid"
idField="id"
fit="true">
2.
表單驗(yàn)證采用Validform
3.
時(shí)間控件采用my97,不要使用easyui的時(shí)間控件,因?yàn)榧虞d效率慢4.
上傳文件使用規(guī)則5.
流程配置表單后,業(yè)務(wù)申請(qǐng)必須重新創(chuàng)建6.
jsp代碼注釋規(guī)范,采用隱式注釋不能用顯式注釋,不然標(biāo)簽還是能讀到:隱式注釋?zhuān)?lt;%--
--%>
顯式注釋?zhuān)?lt;!--
-->
7.
表單布局兩種風(fēng)格:1.table
2.div
1.table
例如:jeecg/demo/jeecgDemo/jeecgDemo.jsp
2.div
例如:webpage/system/role/role.jsp
8.
postgres
數(shù)據(jù)庫(kù)建表規(guī)范字段名字大小寫(xiě)有區(qū)別,請(qǐng)注意9.
菜單采用frame方式打開(kāi)方法dataSourceController.do?goDruid&isIframe
10.
頁(yè)面組件ID命名規(guī)范[1].dategrid組件name<t:dategrid
name="userMe"
[2].組合查詢(xún)DIV<div
id="userMetb"[3].查詢(xún)按鈕對(duì)應(yīng)的js方法<a
href="#"
class="easyui-linkbutton"
iconCls="icon-search"
onclick="userMesearch<>">查詢(xún)</a>9.
項(xiàng)目編碼規(guī)范9.1.
項(xiàng)目編碼規(guī)范1.
項(xiàng)目編碼格式為UTF-8<包括:java,jsp,css,js>2.
sevice接口命名:*ServiceIservice實(shí)現(xiàn)命名:*ServiceImplentity命名:*Entitypage頁(yè)面form命名:*Pageaction命名:*Controller項(xiàng)目沒(méi)有DAO,
SQL寫(xiě)在Service層代碼層次目錄按照自動(dòng)生成目錄3.
SQL文件目錄和命名規(guī)范<1>.所有SQL必須大寫(xiě),不允許用*,全部替換為字段<2>.SQL文件根目錄為:sql
跟接口目錄Service是一個(gè)目錄;
例如:src
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022-2023學(xué)年山東省濟(jì)南市鋼城區(qū)人教版小學(xué)三年級(jí)下冊(cè)數(shù)學(xué)期末試題及答案
- 2022-2023學(xué)年山東德州平原縣五年級(jí)上冊(cè)語(yǔ)文期末試卷及答案
- 燕京啤酒課程設(shè)計(jì)
- 2021-2022學(xué)年江蘇省南通市如東縣四年級(jí)上學(xué)期期末語(yǔ)文真題及答案
- 2021-2022學(xué)年貴州省遵義市紅花崗區(qū)四年級(jí)上學(xué)期期末語(yǔ)文真題及答案
- 機(jī)設(shè)課程設(shè)計(jì)真難
- 王鐸草書(shū)創(chuàng)作課程設(shè)計(jì)
- 2024年滬教版高三歷史下冊(cè)階段測(cè)試試卷94
- 2025年高考物理復(fù)習(xí)熱搜題速遞之電磁振蕩與電磁波(2024年7月)
- 初中語(yǔ)文七年級(jí)上冊(cè)《3 雨的四季》教學(xué)設(shè)計(jì)
- 安全生產(chǎn)目標(biāo)考核表
- 工程訓(xùn)練(廣東工業(yè)大學(xué))智慧樹(shù)知到期末考試答案2024年
- 醫(yī)療技術(shù)行業(yè)碳中和戰(zhàn)略與實(shí)踐
- 租金評(píng)估技術(shù)報(bào)告范文模版
- 2024年江蘇省專(zhuān)升本考試生理學(xué)醫(yī)學(xué)影像技術(shù)測(cè)試題含解析
- 公司年薪制薪酬管理新規(guī)制度
- 初中數(shù)學(xué)九年級(jí)下冊(cè)《位似》(1)教案
- 2024《安全生產(chǎn)法》及《刑法》關(guān)于安全生產(chǎn)的38條處罰紅線詳解培訓(xùn)
- 2022-2023學(xué)年重慶市渝北區(qū)人教PEP版五年級(jí)上冊(cè)期末英語(yǔ)試卷
- 核算崗年終工作總結(jié)
- 造價(jià)年度工作總結(jié)
評(píng)論
0/150
提交評(píng)論