個人覺得比較完善的一個講解jeesite的網站
https://www.w3cschool.cn/jeesite/
jeesite官網
http://jeesite.com/
公司項目都是基於jeesite做的項目
所以就找資料了解一下啦
企業信息化快速開發平台 JeeSite簡介
JeeSite本身是以Spring Framework為核心容器,Spring MVC為模型視圖控制器,MyBatis為數據訪問層, Apache Shiro為權限授權層,Ehcahe對常用數據進行緩存,Activit為工作流引擎。
JeeSite主要定位於企業信息化領域,已內置企業信息化系統的基礎功能和高效的 代碼生成 工具, 包括:系統權限組件、數據權限組件、數據字典組件、核心工具組件、視圖操作組件、工作流組件、代碼生成等。 前端界面風格采用了結構簡單、性能優良、頁面美觀大氣的Twitter Bootstrap頁面展示框架。 采用分層設計、雙重驗證、提交數據安全編碼、密碼加密、訪問驗證、數據權限驗證。 使用Maven做項目管理,提高項目的易開發性、擴展性。
JeeSite目前包括以下三大模塊,系統管理(SYS)模塊、 內容管理(CMS)模塊、在線辦公(OA)模塊、代碼生成(GEN)模塊。 系統管理模塊,包括企業組織架構(用戶管理、機構管理、區域管理)、 菜單管理、角色權限管理、字典管理等功能; 內容管理模塊 ,包括內容管理(文章、鏈接),欄目管理、站點管理、 公共留言、文件管理、前端網站展示等功能; 在線辦公模塊 ,提供簡單的請假流程實例。
JeeSite 提供了常用工具進行封裝,包括日志工具、緩存工具、服務器端驗證、數據字典、當前組織機構數據 (用戶、機構、區域)以及其它常用小工具等。另外還提供一個強大的在線 代碼生成 工具, 此工具提供簡單的單表、一對多、樹結構功能的生成,如果對外觀要求不是很高,生成的功能就可以用了。 如果你使用了JeeSite基礎框架,就可以很高效的快速開發出,優秀的信息管理系統。
內置功能
用戶管理:用戶是系統操作者,該功能主要完成系統用戶配置。機構管理:配置系統組織機構(公司、部門、小組),樹結構展現,可隨意調整上下級。
區域管理:系統城市區域模型,如:國家、省市、地市、區縣的維護。
菜單管理:配置系統菜單,操作權限,按鈕權限標識等。
角色管理:角色菜單權限分配、設置角色按機構進行數據范圍權限划分。
字典管理:對系統中經常使用的一些較為固定的數據進行維護,如:是否、男女、類別、級別等。
操作日志:系統正常操作日志記錄和查詢;系統異常信息日志記錄和查詢。
連接池監視:監視當期系統數據庫連接池狀態,可進行分析SQL找出系統性能瓶頸。
工作流引擎:實現業務工單流轉、在線流程設計器。
為何選擇JeeSite
使用 Apache License 2.0 協議,源代碼完全開源,無商業限制。使用目前主流的Java EE開發框架,簡單易學,學習成本低。
數據庫無限制,目前支持MySql、Oracle,可擴充SQL Server、PostgreSQL、H2等。
模塊化設計,層次結構清晰。內置一系列企業信息管理的基礎功能。
操作權限控制精密細致,對所有管理鏈接都進行權限驗證,可控制到按鈕。
數據權限控制精密細致,對指定數據集權限進行過濾,七種數據權限可供選擇。
提供在線功能代碼生成工具,提高開發效率及質量。
提供常用工具類封裝,日志、緩存、驗證、字典、組織機構等,常用標簽(taglib),獲取當前組織機構、字典等數據。
兼容目前最流行瀏覽器(IE7+、Chrome、Firefox)IE6也支持,但體驗效果差。
技術選型
1、后端- 核心框架:Spring Framework 4.0
- 安全框架:Apache Shiro 1.2
- 視圖框架:Spring MVC 4.0
- 服務端驗證:Hibernate Validator 5.1
- 布局框架:SiteMesh 2.4
- 工作流引擎:Activiti 5.15、FoxBPM 6
- 任務調度:Spring Task 4.0
- 持久層框架:MyBatis 3.2
- 數據庫連接池:Alibaba Druid 1.0
- 緩存框架:Ehcache 2.6、Redis
- 日志管理:SLF4J 1.7、Log4j
- 工具類:Apache Commons、Jackson 2.2、Xstream 1.4、Dozer 5.3、POI 3.9
- JS框架:jQuery 1.9。
- CSS框架:Twitter Bootstrap 2.3.1。
- 客戶端驗證:JQuery Validation Plugin 1.11。
- 富文本:CKEcitor
- 文件管理:CKFinder
- 動態頁簽:Jerichotab
- 手機端框架:Jingle
- 數據表格:jqGrid
- 對話框:jQuery jBox
- 下拉選擇框:jQuery Select2
- 樹結構控件:jQuery zTree
- 日期控件: My97DatePicker
服務器中間件:在Java EE 5規范(Servlet 2.5、JSP 2.1)下開發,支持應用服務器中間件 有Tomcat 6、Jboss 7、WebLogic 10、WebSphere 8。
數據庫支持:目前僅提供MySql、Oracle數據庫的支持,但不限於數據庫,平台留有其它數據庫支持接口, 可方便更改為其它數據庫,如:SqlServer 2008、MySql 5.5、H2等
開發環境:Java EE、Eclipse、Maven、Git
安全考慮
開發語言:系統采用Java 語言開發,具有卓越的通用性、高效性、平台移植性和安全性。分層設計:(數據庫層,數據訪問層,業務邏輯層,展示層)層次清楚,低耦合,各層必須通過接口才能接入並進行參數校驗(如:在展示層不可直接操作數據庫),保證數據操作的安全。
雙重驗證:用戶表單提交雙驗證:包括服務器端驗證及客戶端驗證,防止用戶通過瀏覽器惡意修改(如不可寫文本域、隱藏變量篡改、上傳非法文件等),跳過客戶端驗證操作數據庫。
安全編碼:用戶表單提交所有數據,在服務器端都進行安全編碼,防止用戶提交非法腳本及SQL注入獲取敏感數據等,確保數據安全。
密碼加密:登錄用戶密碼進行SHA1散列加密,此加密方法是不可逆的。保證密文泄露后的安全問題。
強制訪問:系統對所有管理端鏈接都進行用戶身份權限驗證,防止用戶
快速體驗
具備運行環境:JDK1.6+、Maven3.0+、MySql5+或Oracle10g+。修改src\main\resources\jeesite.properties文件中的數據庫設置參數。
根據修改參數創建對應MySql或Oracle數據庫用戶和參數。
運行bin\init-db.bat腳本,即可導入表結構及演示數據(linux操作系統:在控制台中切換至項目根目錄,運行命令:mvn antrun:run -Pinit-db)
運行bin\run-tomcat7.bat或bin\run-jetty.bat,啟動Web服務器(第一次運行,需要下載依賴jar包,請耐心等待)。
最高管理員賬號,用戶名:thinkgem 密碼:admin
常見問題
有時出現文字亂碼:修改Tomcat的server.xml文件的Connector項,增加URIEncoding="UTF-8"用一段時間提示內存溢出,請修改JVM參數:-Xmx512m -XX:MaxPermSize=256m
為什么新建菜單后看不到新建的菜單?因為授權問題,菜單管理只允許最高管理員賬號管理(最高管理員默認賬號:thinkgem 密碼:admin)。
JeeSite的安裝
安裝部署
1. 運行Maven目錄下的settings.bat文件,用來設置maven倉庫路徑,並按提示操作(設置PATH系統變量、配置Eclipse)。
2. 執行jeesite/bin/eclipse.bat 生成工程文件並下載jar依賴包(如果需要修改默認項目名,請打開pom.xml修改第7行artifactId,然后再執行eclipse.bat文件)。3. 將 jeesite 工程導入到eclipse,選中工程,按F5刷新。
4. 設置數據源:src/main/resources/jeesite.properties
5. 導入數據表並初始化數據:運行db/init-db.bat文件。(導入時如果出現“drop”失敗提示信息,請忽略。)
6. 新建Server(Tomcat),注意選擇以下兩個選項:
7. 配置server.xml的Connector項,增加URIEncoding="UTF-8"
8. 部署到Tomcat,設置Auto Reload為Disabled。
9. 訪問工程:http://127.0.0.1:8080/ jeesite 用戶名:thinkgem 密碼:admin
常見問題
1. 'mvn' 不是內部或外部命令,原因如下- PATH未配置或配置了多個不一致的Maven地址,如用戶/系統變量。
- M2_HOME系統/用戶變量地址不正確,可刪除M2_HOME變量。
- 檢查mvn運行是否正常,cmd執行:mvn -v
3. 導入到eclipse下找不到jar包:maven未配置,查看m2_repo倉庫路徑是否正確。
4. 運行init-db.bat提示ORA-xxx:根據錯誤碼排除錯誤,一般是數據庫url不對,用戶名或密碼錯誤。
5. 部署時出現某某被鎖定,一般原因:Tomcat服務中的兩個選項未選中。
6. 字典列表,添加鍵值,出現亂碼:server.xml未配置url編碼為utf-8。
JeeSite的文件結構與配置
一、文件結構
1.1. 源碼目錄src/main/java
com.thinkgem.jeesite |
Jeesite平台目錄 |
├ common |
公共模塊存放目錄 |
│ ├ beanvalidator |
實體Bean驗證相關類 |
│ ├ log |
日志工具相關類 |
│ ├ mapper |
各種Object到Xml、Object到Json的映射轉換類 |
│ ├ persistence |
持久層相關類 |
│ ├ security |
安全相關類 |
│ ├ service |
業務層相關類 |
│ ├ servlet |
公共servlet相關類 |
│ ├ utils |
各種操作小工具類 |
│ └ web |
模型控制器層相關類 |
└ modules |
JeeSite內置功能模塊存放目錄 |
├ act |
Activiti工作流引擎目錄 |
├ cms |
內容管理、新聞發布模塊目錄 |
├ gen |
Web版本代碼生成器目錄 |
├ oa |
在線辦公模塊演示用例存放目錄 |
└ sys |
系統核心模塊存放目錄 |
├ dao |
數據訪問層相關類 |
├ entity |
實體相關類 |
├ interceptor |
系統模塊攔截器相關類 |
├ service |
業務處相關類 |
├ web |
模型控制器層相關類 |
└ utils |
系統模塊的工具類 |
src/main/resource
act |
Activiti工作流引擎相關文件(部署文件、bpmn) |
cache |
Ehcache緩存配置存放目錄 |
mappings |
Mybatis Sql映射文件存放目錄 |
jeesite.properties |
系統配置屬性文件 |
spring-*.xml |
Spring相關文件 |
log4j.properties |
Log4j日志配置屬性文件 |
src/main/webapp
static |
靜態文件存放目錄(JS、CSS、前端插件類庫等) |
└ compressor.bat |
JavaScrpt和CSS文件壓縮腳本 |
userfiles |
用戶上傳文件目錄 |
WEB-INF |
WEB應用安全目錄,通過映射訪問相關文件。 |
├ lib |
依賴jar包目錄 |
├ tags |
Tags標簽存放目錄 |
├ views |
視圖文件目錄 |
│ ├ reportlets |
帆軟報表文件存放路徑 |
│ ├ resources |
帆軟報表配置文件存放目錄 |
│ ├ error |
系統異常映射相關頁面 |
│ ├ include |
視圖相關包含文件 |
│ ├ layouts |
視圖布局相關文件 |
│ └ modules |
內置核心功能模塊視圖相關文件 |
│ ├ act |
Activiti模塊視圖相關文件 |
│ ├ cms |
內容管理模塊視圖相關文件 |
│ ├ gen |
代碼生成模塊視圖相關文件 |
│ ├ oa |
在線辦公模塊視圖相關文件 |
│ └ sys |
系統管理模塊視圖相關文件 |
├ ckfinder.xml |
CKfinder配置文件 |
├ decorators.xml |
Decorator配置文件 |
└ web.xml |
Web配置文件 |
db
db |
數據庫相關腳本、模型及執行文件 |
├ act |
各模塊數據初始化, Oracle建表腳本,數據初始數據腳本文件。 |
├ cms |
|
├ gen |
|
├ oa |
|
├ sys |
|
└ init-db.bat |
初始化數據庫執行腳本(需要Maven支持) |
bin
clean.bat |
清理項目生成的文件腳本 |
eclipase.bat |
生成eclipse項目執行腳本 |
package.bat |
生成編譯項目文件(war包) |
run-jetty.bat |
Jetty服務器運行腳本 |
run-tomcat6.bat |
Tomcat6服務器運行腳本 |
run-tomcat7.bat |
Tomcat7服務器運行腳本 |
二、 jeesite.properties
2.1. 數據源配置# 數據庫驅動,連接設置。
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=jeesite
jdbc.password=123456
# 連接池設置,初始大小,最小,最大連接數。
jdbc.pool.init=1
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
# 測試連接sql語句
jdbc.testSql=SELECT 'x' FROM DUAL
2.2. 系統配置
# 配置產品名稱,版權日期和版本號
productName=JeeSite Admin
copyrightYear=2014
version=V1.1.1
# 是否是演示模式,如果是,則如下模塊,無法進行保存操作
# sys: area/office/user/role/menu/dict, cms: site/category
demoMode=false
# 管理端跟路徑
adminPath=/a
# 前端跟路徑
frontPath=/f
# 信息發布時的URL后綴,可配置HTML后綴的頁面進行緩存
urlSuffix=.html
# 分頁大小,默認每頁15條
page.pageSize=15
# 碩正組件是否使用Cache(一般開發階段,關閉Cache)
supcan.useCache=false
# 設置通知間隔訪問時間,單位毫秒.
oa.notify.remind.interval=60000
2.3. 框架參數配置
# 設置SESSION超時時間,web.xml里設置無效,單位毫秒.
session.sessionTimeout=120000
session.sessionTimeoutClean=120000
# 緩存設置
ehcache.configFile=cache/ehcache-local.xml
#ehcache.configFile=cache/ehcache-rmi.xml
# 首頁地址
web.view.index=/a
# 視圖文件配置,前綴和后綴
web.view.prefix=/WEB-INF/views/
web.view.suffix=.jsp
# 最大上傳字節數 10M=10*1024*1024(B)=10485760
web.maxUploadSize=10485760
# 設置日志攔截器,攔擊的URI,@RequestMapping 值
web.logInterceptExcludeUri=/, /login, /sys/menu/tree, /sys/menu/treeData, /oa/oaNotify/self/count
web.logInterceptIncludeRequestMapping=save, delete, import, updateSort
# 工作流配置
activiti.isSynActivitiIndetity=false
activiti.export.diagram.path=c:/activiti_diagram
#activiti font (windows font: \u5B8B\u4F53 linux font: simsun)
activiti.diagram.activityFontName=\u5B8B\u4F53
activiti.diagram.labelFontName=\u5B8B\u4F53
activiti.form.server.url=http://127.0.0.1:8075/xxxx
三、pom.xml

修改完成后運行eclipse.bat重新生成項目文件。
3.2. 添加jar依賴包
可通過公司maven私服查詢相應jar依賴包。
私服地址:http://192.168.11.36:8888/nexus/
如果公司私服上沒有相應的依賴jar
1) 可聯系王震添加依賴jar,
2) 將jar文件拷貝項目WEB-INF下的lib目錄,並配置pom,例如:
<dependency>
<groupId>com.test</groupId>
<artifactId>test-core</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>
${project.basedir}/src/main/webapp/WEB-INF/lib/test-core-1.0.jar
</systemPath>
</dependency>
3.3. 刪除init-db插件
項目初始化完成后,一定要刪除或重命名pom里面的init-db插件,防止項目進行中誤操作運行了init-db.bat文件,數據庫被清空。
四、數據庫設計
模型文件:/ jeesite/db/test/jeesite.erm業務數據表必須包含以下公共字段:
五、重要規范
JeeSite 內置組件的應用
1. 常用組件
1.1. 布局組件
布局文件配置:
/ jeesite/src/main/webapp/WEB-INF/decorators.xml
默認布局文件:
/ jeesite/src/main/webapp/WEB-INF/views/layouts/default.jsp
非公共,自己建立的布局文件:
/ jeesite/src/main/webapp/WEB-INF/views/模塊路徑/layouts/布局文件.jsp
使用布局文件:
JSP的head里添加:<meta name="decorator" content="default"/>
1.2. 用戶工具 UserUtils.java fns.tld
應用場景:在java文件或jsp頁面上,獲取當前用戶相關信息
1. 獲取當前用戶:
1) UserUtils.getUser();
2) entity.currentUser()
3) ${fns:getUser()}
2. 獲取當前用戶部門:
1) UserUtils.getOfficeList()
2) ${fns:getOfficeList()}
3. 獲取當前用戶區域:
1) UserUtils.getAreaList()
2) ${fns:getAreaList()}
4. 獲取當前用戶菜單:
1) UserUtils.getMenuList()
2) ${fns:getMenuList()}
5. 獲取當前用戶緩存:
1) UserUtils.getCache(key);
2) ${fns:getCache(cacheName, defaultValue)}
6. 設置當前用戶緩存:
1) UserUtils.putCache(key);
1.3. 全局緩存 CacheUtils.java
應用場景:系統字典
1. 設置應用程序緩存:CacheUtils.put(key);
2. 獲取應用程序緩存:CacheUtils.get(key);
1.4. 字典工具 DictUtils.java
應用場景:系統全局固定的字典數據,java或jsp中獲取字典相關數據。
1. 根據類型和值獲取字典標簽(列表取值):
a) DictUtils.getDictLabel(Stringvalue, String type, String defaultValue)
b) ${ fns:getDictLabel (value,type, defaultValue)}
2. 根據類型和標簽獲取字典值(根據標簽取值):
a) DictUtils.getDictValue(Stringlabel, String type, String defaultLabel)
b) ${fns:getDictValue(label, type,defaultValue)}
3. 根據類型獲取字典列表(下拉框,復選框,單選框):
a) DictUtils.getDictList(Stringtype)
b) ${fns:getDictList(type)}
1.5. 功能權限控制
應用場景:訪問功能授權,查看權限,編輯權限,導入權限,審核權限。
1. 給方法添加權限標志
@RequiresPermissions("sys:submodule:user:view")
@RequiresUser
2. 菜單中設置權限標志。
3. 判斷權限:
SecurityUtils.getSubject().isPermitted("sys:user:edit");
4. 視圖中控制按鈕(shiro.tld):
<shiro:hasPermissionname="sys:user:edit"> <inputid="btnSubmit" class="btn btn-primary"type="submit" value="保存"/> </shiro:hasPermission> <!-- 任何一個符合條件的權限 --> <shiro:hasAnyPermissions name="sys:user:view,sys:user:edit,"> <inputid="btnSubmit" class="btn btn-primary"type="submit" value="返回"/> </shiro: hasAnyPermissions>
1.6. 數據權限
應用場景:某用戶訪問數據范圍:公司及子公司,本公司,部門及子部門,本部門,當前用戶,明細設置。
// 生成數據權限過濾條件(dsf為dataScopeFilter的簡寫,在xml中使用 ${sqlMap.dsf}調用權限SQL)
user.getSqlMap().put("dsf", dataScopeFilter(user.getCurrentUser(),"o", "u"));
<!-- 分頁查詢用戶信息 --> <select id="findList" parameterType="User"resultMap="userResult"> SELECT <include refid="userColumns"/> FROM sys_user a <include refid="userJoins"/> WHERE a.del_flag = '0' <!-- 數據范圍過濾 --> ${sqlMap.dsf} </select>
/**
* 數據范圍過濾
* @param user 當前用戶對象,通過“entity.getCurrentUser()”獲取
* @param officeAlias 機構表別名,多個用“,”逗號隔開。
* @param userAlias 用戶表別名,多個用“,”逗號隔開,傳遞空,忽略此參數
* @return 標准連接條件對象
*/
String dataScopeFilter (User user, StringofficeAlias, String userAlias)
1.7. 智能分頁組件
// 設置分頁參數,則分頁,如果不設置,則根據條件獲取全部
user.setPage(page);
// 執行分頁查詢
page.setList(userDao.findPage(user));
1.8. 樹選擇組件
標簽文件:/ jeesite/src/main/webapp/WEB-INF/tags/treeselect.tag
1.8.1. 區域選擇組件
<tags:treeselect id="area"name="area.id" value="${area.id}" labelName="area.name"labelValue="${area.name}" title="區域" url="/sys/area/treeData"cssClass="input-small" allowClear="true" notAllowSelectParent="true"/>
多選需要加 checked="true" 屬性
1.8.2. 公司選擇組件
<tags:treeselectid="office" name="office.id"value="${user.office.id}" labelName="office.name"labelValue="${user.office.name}" title="部門" url="/sys/office/treeData?type=1"cssClass="input-small" allowClear="true"notAllowSelectParent="true"/>
多選需要加 checked="true" 屬性
1.8.3. 部門選擇組件
<tags:treeselectid="office" name="office.id"value="${user.office.id}" labelName="office.name"labelValue="${user.office.name}" title="部門" url="/sys/office/treeData?type=2"cssClass="input-small" allowClear="true"notAllowSelectParent="true"/>
多選需要加 checked="true" 屬性
1.8.4. 人員選擇組件
<tags:treeselectid="user" name="user.id" value="${user.id}"labelName="user.name" labelValue="${user.name}" title="用戶" url="/sys/office/treeData?type=3"cssClass="input-small" allowClear="true"notAllowSelectParent="true"/>
多選需要加 checked="true" 屬性
1.9. 文件選擇、文件上傳組件
<form:hidden path="name"htmlEscape="false" maxlength="255"class="input-xlarge"/> <tags:ckfinder input="name"type="files" uploadPath="/test "/>
1.10. 富文本在線編輯器組件
<form:textarea id="name"htmlEscape="true" path="name" rows="4"maxlength="200" class="input-xxlarge"/> <tags:ckeditor replace="name"uploadPath="/test " />
1.11. 其它工具
/src/main/java/com/thinkgem/jeesite/common/utils/...
Excel(Export/Import)、StringUtils、DateUtils、FileUtils、Encodes、CookieUtils、Collections3
2. 封裝及組件
2.1. 工具類組件
1) UserUtils:用戶工具類(獲取當前用戶的相關信息)。
2) CacheUtils:系統級別Cache工具類。
3) CookieUtils:Cookie操作工具類
4) DateUtils:日期時間工具類。
5) FileUtils:文件操作工具類。
6) StringUtils:字符串操作工具類。
7) ExcelExcel導入導出,參考用戶導入導出例子。
8) Reflections:Java對象操作反射工具類。
9) BeanMapper:Bean與Bean,Bean與Conllection的互轉
10) JaxbMapper:XML與Object互轉。
11) JsonMapper:JSON與Object互轉。
12) Cryptos、Digests:密鑰工具類SHA1、MD5。
13) Collections3:集合對象工具類。
14) Encodes:各種編碼轉換工具類。
15) Exceptions:異常工具類。
16) FreeMarkers:FreeMarkers模板工具類。
17) Identities:唯一標識生成算法工具類(uuid、random)
18) PropertiesLoader:屬性文件操作工具類
19) Threads:線程相關操作工具類。
2.2. 自定義標簽組件
1)ckeditor.tag:HTML在線編輯器。
2)ckfinder.tag:在線文件管理。
3)iconselect.tag:Icon圖標選擇。
4)message.tag:消息彈框。
5)validateCode.tag:驗證碼。
2.3. EL 函數組件
1)fns.tld:系統相關EL函數。
2.4. JavaScript 組件
1) jQuery:強大的js框架,動態特性,AJAX、插件擴展
2) jQuery Validate:基於jQuery的客戶端校驗插件。
3) jBox:基於jQuery的多功能對話框插件。
4) zTree:基於jQuery的樹結構展示查看。
5) My7DatePicker:日期選擇控件。
6) treeTable:基於jQuery的表格數顯示插件。
7) CKEditor:富文本在線HTML編輯器。
8) CKFinder:在線文件資源管理器。
9) SuperSlide:基於jQuery的滑動門插件(滑動圖片,Tab,橫幅等)。
3. 界面UI、CSS、JS
- 主題CSS框架:http://v2.bootcss.com/base-css.html
- 多功能下拉框:http://ivaynberg.github.io/select2/
- 界面文檔(查找class,查找css):http://www.bootcss.com/scaffolding.html
- 前端驗證: /src/main/webapp/static/jquery-validation/1.11.0/demo/index.html
- 彈出對話框: /src/main/webapp/static/jquery-jbox/2.3/docs/jbox-demo.html
top.$.jBox.open('iframe:'+href,'查看評論',$(top.document).width()-220,$(top.document).height()-180,{
buttons:{"關閉":true},
loaded:function(h){
$(".jbox-content",top.document).css("overflow-y","hidden");
$(".nav,.form-actions,[class=btn]",h.find("iframe").contents()).hide();
$("body",h.find("iframe").contents()).css("margin","10px");
}
});
JeeSite 代碼生成器的應用
1 操作步驟
- 使用ERMaster建立數據模型(1.1節)
- 進入代碼生成模塊,添加業務表配置(1.2節)
- 進入代碼生成模塊,添加生成方案配置並生成代碼(1.3節)
- 根據生成代碼的Controller,配置菜單和權限(1.4節)
1.1 數據模型
- 進行數據庫設計,建表。遇見字段需要存儲中文字符的時候要用nvarchar,不要用varchar。
- 自己建立表模型是請拷貝一份“db/test/jeesite.erm”文件,在此模型基礎上建立自己的業務表即可。
1.1.1 業務表必須包含的字段
紅框內為必須有的字段:
1.1.2 一對多必須包含的字段
紅框內為必須有的字段:
1.1.3 樹結構必須包含的字段
紅框內為必須有的字段:
1.1.4 快速添加必須包含的字段
在test/jeesite.erm文件中已內置兩個字段組,分別是common和tree_field,在表編輯界面中可快速選擇並添加相應字段,如下圖:
1.2 業務表配置
1.2.1 第一步,選擇表
1.2.2 第二步,配置表

- 表名:物理表表名
- 說明:物理表表描述
- 類名:生成表關聯的實體類名稱
- 父表表名:關聯父表的表名,外鍵:當前表關聯父表的主鍵,如果當前表為子表,需在此指定父表及外鍵。外鍵字段需在字段列表中手動設置屬性名(對象.主鍵,例如:將userId修改為user.id)
- 列名:數據表定義的字段名稱
- 說明:數據表定義的字段注釋
- 物理類型:數據表定義字段類型
- Java類型:實體對象的屬性字段類型
- Java屬性名稱:實體對象的屬性字段(對象名.屬性名|屬性名2|屬性名3,例如:用戶user.id|name|loginName,屬性名2和屬性名3為Join時關聯查詢的字段)
- 主鍵:是否是主鍵字段
- 可空:該字段是否可為空
- 插入:是否是插入字段,如果是則包含在insert語句里
- 編輯:是否是編輯字段,如果是則包含在update語句里
- 列表:是否是列表查詢,如果是則包含在列表頁的表格列里。
- 查詢:是否是查詢字段,如果是則包含在查詢頁的查詢列表里。
- 查詢方式:查詢字段的查詢方式,也就是where后的條件表達式,如:字段1=字段2 AND 字段3>字段4 AND 字段5 !=字段6。
- 字段生成方案:表單中字段生成的樣式,如:input,select,treeselect,areatext等等
- 字典類型:如果字段生成方案為:下拉框、復選框、單選框,則該字段必須指定一個字典類型,字典類型為字段管理中的字典類型。
- 排序:字段生成的先后順序,升序。

- 方案名稱:自定的方案名稱,隨意寫即可。
- 模板分類:生成的模板,目前可生成如下模板:增刪改查(單表)、增刪改查(一對多)、僅持久層(dao/entity/mapper)、樹結構表(一體)。
- 生成包路徑:生成哪個包下。
- 生成模塊名:生成包下的模塊名稱,模塊名稱下進行分層。
- 生成子模塊名:分層下的文件夾,可為空。
- 生成功描述:生成到類注釋里。
- 生成功能名:生成功能提示,如TAB上、列表上、提示信息等。
- 生成功能作者:開發者姓名
- 生成選項:是否替換現有文件,提供重復生成,覆蓋原有文件。
- 根據控制器@RequestMapping及@RequiresPermissions添加菜單和權限標志
導入“db/gen/example_xx.sql”文件(默認已導入),將導入“業務表配置”、“生成方案配置”、“菜單權限”示例信息,生成代碼后效果如下:
1.5.1 菜單







一對多生成需要配置一個主表,和一個或多個子表。
子表配置需要指定父表表名和外鍵,如下:

表配置結果,如下:


其它操作與單表生成相同。
JeeSite 碩正WEB組件的應用
1. 簡介
碩正描述格式采用XML,數據格式采用JSON。原因如下:描述采用XML可表現比較復雜的結構,易於官方文檔查找好對應;數據采用JSON格式原因有三點,一是JSON官方有很好的支持;二是JSON格式比較簡單並解析速度快,三是JSON相比XML要小,節省流量。
后台采用注解方式配置,自動返回描述XML字符串和數據JSON字符串。
- 描述文件XML注解配置請參考本文第2章;
- 數據格式JSON注解配置請參考Jackson注解,官方網站
2. 樹列表注解
實例代碼見TestController.java,testList.jsp文件,演示頁面如下:
2.1. 調用實例
@SupTreeList(
properties=@SupProperties(headerFontIndex="2", curSelBgColor="#ccddcc",
displayMask="backColor=if(name='管理員', '#ff0000', transparent)",
expresses={
@SupExpress(text="total=round(price*num, 2)"),
@SupExpress(text="price=round(total/num, 4)")
}),
fonts={
@SupFont(faceName="宋體", weight="400"),
@SupFont(faceName="楷體", weight="700", height="-12"),
@SupFont(faceName="楷體", weight="400", height="-12")},
groups={
@SupGroup(id="date", name="日期", headerFontIndex="1", sort=50),
@SupGroup(id="date2", name="日期2", headerFontIndex="2", sort=60, parentId="date"),
@SupGroup(id="date3", name="日期3", headerFontIndex="2", sort=70, parentId="date")
})
實體配置,參考類: Test.java
2.2. @SupTreeList
- 碩正總體注解
- 碩正主要注解,只可以定義到類之上。
2.3. @ SupProperties
碩正屬性設置注解。
2.4. @ SupFont
碩正字體設置注解。
2.5. @SupCol、@SupGroup
碩正表頭列及列表頭組設置注解。
3. JS封裝庫 supcan.js
3.1. 調用實例
<%@include file="/WEB-INF/views/include/supcan.jsp" %> <script type="text/javascript"> $(document).ready(function() { su = supcan(AF, "Test", { ready: function(){ // 加載數據 page(); }, event: function(Event, p1, p2, p3, p4){ if(Event == 'DblClicked'){ edit(); } } }); }); </script>
解釋:
AF為:碩正實例化后的對象。
<div id="supcan" class="supcan"> <script>insertTreeList('AF', 'border=none;')</script> </div>
Test為,實體類的名稱。
Ready:碩正加載調用方法。
Event:碩正事件調用方法。
3.2. 方法接口
/**
* 實例化一個碩正控件
* @param AF 碩正對象
* @param url 碩正描述文件URL,如果不是一個URL,則填寫實體類名
* @param options 參數選項
* @returns {Supcan} 碩正封裝對象實例
*/
function supcan(AF, url, options);
options參數:
su: $this, // 當前碩正對象
checked: true, // 是否插入復選框
curSelMode: "rows", // 行選擇模式(row:單選;rows:多選;excel:Excel選擇模式)
dataType: "json", // 數據類型,如果數據類型不是json,則This.data不自動轉換為對象,分頁代碼也不自動賦值
height: "auto", // 控件高度,默認自適應。
body: "body", // 控件高度自適應,相關對象
frame: top.mainFrame,// 控件高度自適應,相關對象
ready: function(){}, // 默認的控件加載調用方法
event: function(){} // 默認的控件事件調用方法
對象公共方法:
var $this = this;
/**
* 碩正原始對象
*/
$this.AF = AF;
/**
* 碩正描述文件URL,如果不是一個URL,則填寫實體類名
*/
if (url.indexOf('/') == -1){
$this.url = ctx + '/supcan/treeList/' + url + '.xml';
}else{
$this.url = url;
}
/**
* 碩正組件配置選項
*/
$this.options
/**
* 碩正數據對象,如果dataType為json,則為JSON對象,否則為數據字符串
*/
$this.data = "";
/**
* 調用碩正內置函數
*/
$this.func = function(name, param)
/**
* 碩正控件自動高度
*/
$this.autoHeight = function()
/**
* 初始化方法
* @param url 描述文件URL
*/
$this.init = function(url)
/**
* 加載數據
* @param dataUrl 數據調用URL
* @param paramString 參數字符串
* @param pareDiv 分頁DIV的ID,如果數據格式為JSON,則自動設置分頁器代碼。
*/
$this.load = function(dataUrl, paramString, callback)
/**
* 加載數據
* @param form 參數表單,自動序列化表單字段,加入數據URL中
* @param page 分頁DIV,如果數據格式為JSON,則自動設置分頁器代碼。
*/
$this.loadByForm = function(form, page)
/**
* 獲取單元格數據
* @param columnName 列表列名
* @param isMany 是否支持多選,獲取多個值
*/
$this.getCellText = function(columnName, isMany)
/**
* 切換到以樹顯示,並讓勾選列和第一列(樹的排序列)合並顯示
*/
$this.setTree = function(flag)
JeeSite 工作流的應用實例
1 新建流程模型
在線辦公-流程管理-模型管理-新建模型
點擊“提交”后會立即跳轉到“流程在線設計器”頁面,請看下一章節
2 在線流程設計器
在線辦公流程管理模型管理模型管理編輯
注意:此功能不支持IE,請用谷歌或火狐瀏覽器編輯。
2.1 設置流程屬性

- 名稱:流程定義名稱
- 描述:流程定義描述
- 流程標識:流程定義KEY,對應procDefKey,用來標識一個流程
2.2 拖拽形狀元素
- Start event:開始事件
- End entit:結束事件
- User task:用戶任務活動
- Service task:服務任務活動
- Exclusive gateway:排它網關通道,只能有一條分支執行,如if else
- Parallel gateway:並行網關通道,所有分支一塊執行
- Enclusive gateway:包含網關通道,執行符合條件的分支
參考:http://www.mossle.com/docs/activiti/#bpmnConstructs
2.3 流程發起人流程變量
在開始節點的屬性中設置“流程發起人”變量名:如:apply
這時,任務的參與者可設置${apply},來指定誰發起誰執行

如發起人發起流程,被駁回是,駁回到發起人,可使用方法。
2.4 掛接表單地址
- 全局表單:新建流程時或活動元素上未設置表單標識時調用的表單,位於開始事件屬性中“表單標識”字段,指定表單訪問地址。
- 活動表單:當前步驟使用的表單,使用活動節點屬性“表單標識”字段。

2.5 設置參與者
在活動節點屬性中找到“參與者”屬性,點擊“…”彈出如下窗口
- assignee:任務執行人,設置系統中的“登錄名”(loginName)。
- candidateUsers:任務執行人,多個用逗號“,”隔開。
- candidateGroups:任務執行組,多個用逗號“,”隔開,設置系統中的“角色英文名(enname)”。
assignee和candidateUsers的區別是:assignee不需要簽收任務,直接可執行任務;candidateUsers為競爭方式分配任務,被指定人待辦中都有一條任務,誰先簽收誰就獲得任務的執行權。
參與者可指定流程變量(EL表達式),動態指定參與者,如:${processer}
JeeSite 手機端基礎接口文檔
1 傳輸格式
傳輸格式均為JSON字符串,使用spring mvc返回對象,並自動通過fasterxml jackson工具類(JsonMapper.java)進行對象到JSON轉換。
輸出格式符合JSON標准,UTF-8編碼。
2 賬號登錄
http://127.0.0.1:8080/ jeesite/a/login?__ajax=true
提交參數:
用戶名: username
密 碼: password
驗證碼: validatjeesite(isValidatjeesiteLogin為true時需要提交驗證碼)
手機登錄:mobileLogin=true
提交方式:POST
獲取驗證碼圖片:
http://127.0.0.1:8080/jeesite/servlet/validatjeesiteServlet
3 登錄成功
http://127.0.0.1:8080/jeesite/a
{
"id": "1",(ID生成策略為UUID,字符串格式,系統自帶用戶為數值序列)
"loginName": "system",(登錄名)
"name": "系統管理員",(用戶姓名)
"mobileLogin": true,(是否是手機登錄)
"sessionid": "b6b486a8919e4fc196358e10b6a82a2b"(當前用戶SESSIONID)
}
4 登錄失敗
{
"username": "system",(登錄用戶名)
"rememberMe": false,(是否選擇了記住我)
"mobileLogin": true,(是否是手機登錄)
"isValidatjeesiteLogin": true,(登錄三次失敗為驗證碼登錄,顯示驗證碼圖片)
"message": "用戶或密碼錯誤, 請重試."(登錄失敗信息,驗證碼錯誤提示驗證碼錯誤信息)
}
5 賬號退出
http://127.0.0.1:8080/jeesite/a/logout
6 請求頁面
6.1 格式
在請求路徑后包含會話ID(JSESSIONID一定要大寫)即可,格式如下:
URL = “請求URL” + “;JSESSIONID=”+ “會話ID”
6.2 示例
http://127.0.0.1:8080/jeesite/a/test/test/listData;JSESSIONID=b6b486a8919e4fc196358e10b6a82a2b?__ajax=true
7 獲取基礎信息
7.1 當前用戶信息
http://127.0.0.1:8080/jeesite/a/sys/user/info
7.2 獲取區域列表
http://127.0.0.1:8080/jeesite/a/sys/area/treeData
7.3 獲取部門列表
http://127.0.0.1:8080/jeesite/a/sys/office/treeData
7.4 獲取用戶列表
http://127.0.0.1:8080/jeesite/a/sys/user/treeData?officeId=2
返回用戶ID需要替換 “u_”,返回原始ID字符串
2.6 設置流轉條件
在流轉線的屬性中找到“流轉條件”,這里,寫EL表達式,返回true或false,如:${flag == ‘1’}
2.7 保存流程設計圖
工具欄上點擊“保存”按鈕
這時,任務的參與者可設置${apply},來指定誰發起誰執行
如發起人發起流程,被駁回是,駁回到發起人,可使用方法。
2.8 注意事項
- 所有編號,如:模型編號、流程編號、活動節點編號,都不允許以數字開頭。
3 部署流程
- 上步咱們學習了流程設計,產生流程設計圖,如何將我們的圖部署到系統中並使用呢,請看如下操作:
- 在線辦公流程管理模型管理模型管理部署
- 接着系統會提示“部署成功”信息,如果提示錯誤,說明你流程設計圖有問題,請檢查錯誤,重新執行部署操作。
- 另外兩種部署方法,通過eclipse插件設計好的流程:
在線辦公-流程管理-流程管理-部署流程-選擇流程.bpmn.xml編寫並執行ant腳本,啟動系統將自動部署/ jeesite/src/main/resources/act/build.xml。
- 設置流程分類:在流程管理中直接點擊流程分類進行設置。
- 同一標識流程,部署多次,版本號自動加1
- 正在運行的流程,再次部署新流程后,正在運行的流程還按照原來流程設置走,再次新建的流程使用新流程走。
4 流程表單流轉
4.1 數據庫設計使用erm進行數據庫建模,然后使用代碼生成工具生成增刪改查代碼。
流程業務表中必須包含,如下字段:

功能訪問路徑與第2章掛接表單對應(/oa/testAudit/form);
請參考:“在線辦公->個人辦公->審批測試”模塊
源碼:com.thinkgem.jeesite.modules.oa.*. TestAudit*.java,testAudit*.jsp
4.3 啟動流程接口
TestAuditService.java第62行,傳遞參數如下:
/**
* 啟動流程
* @param procDefKey 流程定義KEY
* @param businessTable 業務表表名
* @param businessId 業務表編號
*/
@Transactional(readOnly = false)
public void startProcess(String procDefKey, String businessTable, String businessId)
4.4 提交任務接口
TestAuditService.java第123行,傳遞參數如下:
/**
* 提交任務, 並保存意見
* @param taskId 任務ID
* @param procInsId 流程實例ID,如果為空,則不保存任務提交意見
* @param comment 任務提交意見的內容
* @param vars 任務變量
*/
@Transactional(readOnly = false)
public void complete(String taskId, String procInsId, String comment, Map<String, Object> vars)
4.5 視圖流轉信息調用組件
傳遞流程實例ID,如下:
<tags:actHistoicFlow procInsId="${testAudit.act.procInsId}" />
5 測試執行
在線辦公個人辦公新建任務test_audit啟動流程系統自動調用流程設計時設置的開始節點中的“表單標識”地址




流程跟蹤圖:
在待辦中點擊“環節名稱”,進入流程跟蹤圖界面

辦理任務,最下方顯示流轉信息:

/**
* 使碩正控件變為灰色
*/
$this.setGrayWindow
4. 應用實例
展示頁面:
WEB-INF/views/modules/test/testList.jsp
數據獲取方法:
src/main/java/cn/net/modules/test/web/TestController.java 里的 listData 方法
數據實體類配置:
com.thinkgem.jeesite.test.entity.Test.java
第七個自己在項目中沒有看見用過
這是一個很不錯的框架 很智能的 使用過的道友們可以交流一下啦