jeesite 框架的简单应用

个人觉得比较完善的一个讲解jeesite的网站

https://www.w3cschool.cn/jeesite/

jeesite官网

http://jeesite.com/

公司项目都是基于jeesite做的项目

所以就找资料了解一下啦

企业信息化快速开发平台 JeeSite简介

由 ThinkGem 创建, 最后一次修改 2016-10-18
JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台。

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
2、前端
  • 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
4、平台
服务器中间件:在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的安装

由 ThinkGem 创建, 最后一次修改 2016-10-18

安装部署

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
2. 运行eclipse.bat 找不到文件路径或乱码:一般原因是路径中包含空格或中文。
3. 导入到eclipse下找不到jar包:maven未配置,查看m2_repo仓库路径是否正确。
4. 运行init-db.bat提示ORA-xxx:根据错误码排除错误,一般是数据库url不对,用户名或密码错误。
5. 部署时出现某某被锁定,一般原因:Tomcat服务中的两个选项未选中。
6. 字典列表,添加键值,出现乱码:server.xml未配置url编码为utf-8。

JeeSite的文件结构与配置

由 ThinkGem 创建, 最后一次修改 2016-10-18

一、文件结构

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

系统模块的工具类

1.2. 资源目录
src/main/resource

act

Activiti工作流引擎相关文件(部署文件、bpmn)

cache

Ehcache缓存配置存放目录

mappings

Mybatis Sql映射文件存放目录

jeesite.properties

系统配置属性文件

spring-*.xml

Spring相关文件

log4j.properties

Log4j日志配置属性文件

1.3. 发布目录
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配置文件

1.4. 执行目录
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

 
3.1. 修改项目名称
artifactId:项目名称   version:版本
修改完成后运行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
业务数据表必须包含以下公共字段:

五、重要规范

1. 类注释:必须包含类功能描述,作者,时间
2. 方法注释:除非常容易理解的方法如get、form、save、delete等方法外的方法必须加注释来说明用途,传递参数。
3. 按照以上命名结构进行文件分配存放。
4. 视图文件名要加模块或功能前缀,例如actTaskTodoList.jsp,代表:工作流任务待办列表,不要写成list.jsp或todoList.jsp或taskTodoList.jsp。
5. Sql与定义分离:不在万不得已的情况下不要写在java文件里,分离。

JeeSite 内置组件的应用

由 ThinkGem 创建, 最后一次修改 2016-10-18

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

  1. 主题CSS框架:http://v2.bootcss.com/base-css.html
  2. 多功能下拉框:http://ivaynberg.github.io/select2/
  3. 界面文档(查找class,查找css):http://www.bootcss.com/scaffolding.html
  4. 前端验证: /src/main/webapp/static/jquery-validation/1.11.0/demo/index.html
  5. 弹出对话框: /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 代码生成器的应用

由 ThinkGem 创建, 最后一次修改 2016-10-20

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等等
  • 字典类型:如果字段生成方案为:下拉框、复选框、单选框,则该字段必须指定一个字典类型,字典类型为字段管理中的字典类型。
  • 排序:字段生成的先后顺序,升序。
1.3 生成方案配置
  • 方案名称:自定的方案名称,随意写即可。
  • 模板分类:生成的模板,目前可生成如下模板:增删改查(单表)、增删改查(一对多)、仅持久层(dao/entity/mapper)、树结构表(一体)。
  • 生成包路径:生成哪个包下。
  • 生成模块名:生成包下的模块名称,模块名称下进行分层。
  • 生成子模块名:分层下的文件夹,可为空。
  • 生成功描述:生成到类注释里。
  • 生成功能名:生成功能提示,如TAB上、列表上、提示信息等。
  • 生成功能作者:开发者姓名
  • 生成选项:是否替换现有文件,提供重复生成,覆盖原有文件。
1.4 菜单权限
  • 根据控制器@RequestMapping及@RequiresPermissions添加菜单和权限标志
1.5 生成示例
导入“db/gen/example_xx.sql”文件(默认已导入),将导入“业务表配置”、“生成方案配置”、“菜单权限”示例信息,生成代码后效果如下:
1.5.1 菜单
1.5.2 单表
1.5.3 主子表
1.5.4 树结构
1.6 主子表(一对多)注意事项
一对多生成需要配置一个主表,和一个或多个子表。
子表配置需要指定父表表名和外键,如下:

表配置结果,如下:

生成方案中选择“增删改查(一对多)”,业务表表名选择“主表”,如下:

其它操作与单表生成相同。

JeeSite 硕正WEB组件的应用

由 ThinkGem 创建, 最后一次修改 2016-10-20

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 工作流的应用实例

由 ThinkGem 创建, 最后一次修改 2016-10-20

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 手机端基础接口文档

由 ThinkGem 创建, 最后一次修改 2016-10-20

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进行数据库建模,然后使用代码生成工具生成增删改查代码。
流程业务表中必须包含,如下字段:
生成ddl导入数据库
 
4.2 代码生成代码
功能访问路径与第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

第七个自己在项目中没有看见用过

这是一个很不错的框架  很智能的  使用过的道友们可以交流一下啦

猜你喜欢

转载自www.cnblogs.com/zhukaixin/p/9156069.html