开源项目名称:
osframe管理系统
托管地址:
http://git.oschina.net/haizicq/osframe
主要技术:
spring mvc、spring、hibernate、angular js、seajs、bootstrap、shiro
框架介绍:
本框架是一个基础后台开发框架,基于springmvc+spring+hibernate搭建,前端采用angular js+sea js +bootstrap展现,基于shiro的权限管理和登陆控制。基础框架中包含了用户管理、权限管理等基础模块,提供了简单的首页门户,可以快速的实现新项目的搭建。
框架特色:
支持电脑和手机界面的自动智能切换。
技术交流群:330710190(OSFrame技术交流群) 欢迎大家加入,共同探讨使用过程中的问题。
1、开发前准备知识点
1)后端开发必备知识熟悉spring mvc、spring、hibernate的基础使用
2)前端开发必备知识熟悉 angular js 的使用,本项目做为首个开源
2、模块化支撑
1)项目中所有模块建在com.os.osframe包下,支持一到多级目录的模块,如:framework(框架模块)、os.users(用户管理模块)
2)各独立模块下包应包含:dao、domain、service、web四个包,
dao-数据操作相关的类
domain-实体类
service-业务逻辑类
web-mvc控制类
3)各模块资源目录下应包括:i18n文件夹、enums.properties、*-beans.xml、*-servlet.xml
i18n-国际化文件
enums.properties-模块枚举属性(有枚举时使用)
*-beans.xml-模块的spring相关配置(可以不用) *代表模块名称,推荐按驼峰命名
*-servlet.xml-模块的springmvc相关配置(一般不需要) *代表模块名称,推荐按驼峰命名
4)jsp对应在web-inf/jsp目录中
模块对应的jsp文件规则是:模块路径/实体名/实体名_页面后缀.jsp
基础的页面类型包括:编辑(_edit)、查看(_look)、列表(_list)
如:员工信息列表在用户模块下,路径为:core/users/mscUsersPerson/mscUsersPerson_list.jsp
5)模块js文件在resource目录下,包括app.js和页面js
app.js-定义模型引入相应依赖,并配置路由规则
页面js-执行页面功能逻辑
3、基础页面增删改查功能实现
1)实体,包含实体类
首先创建实体类,继承BaseDomain,定义好除id以外的所有字段,并写好get和set方法
在实体类上添加@Entity注解和@Table(name="表名")定义好表名
在字段上添加@Column(name="字段名",length = 字段长度)
2)数据操作层(DAO),包含一个接口和一个实现类
先在dao包中创建接口,继承IBaseDao<实体类>,暂时无需添加任何代码
然后在dao.impl包创建实现类,继承BaseDaoImpl<实体类>并实现上面创建的接口,同样暂时不用添加任何代码
最后在实现类上添加@Repository("dao bean名称")注解
3)业务逻辑层(Service),包含一个接口和一个实体类
先在service包中创建接口,继承IBaseService<实体类>,暂时无需添加任何代码
然后在service.impl包创建实现类,继承BaseServiceImpl<实体类>并实现上面创建的接口,同样暂时不用添加任何代码
最后在实现类上添加@Repository("service bean名称")注解
使用@Resource根据变量名自动装载对应的bean,这里配置第二步定义的dao bean名。注意不推荐要使用@Autowired,按接口类型自动装配,不便于一个接口多个实现的情况。
同时添加getBaseDao方法,将注入的dao返回回去,这是BaseServiceImpl中的一个抽象函数需要自类中实现,由于父类中调用。
@Resource
IBaseDao daobean名称;
public IBaseDao getBaseDao(){
return daobean名称;
}
4)控制层(web),包含一个控制类
创建一个控制类,继承BaseController<实体类>
在类上使用@Controller注解标注控制类,使用@RequestMapping(value = "访问路径")注解映射类的基础访问路径
实现BaseController的抽象方法
@Resource
IBaseService servicebean名称;
@Override
protected IBaseService getServiceImp() {
return servicebean名称;
}
5)模块首页(index.jsp)
页头引入:<%@include file="/common/jsp/index_top.jsp"%>
页面底部引入:<%@include file="/common/jsp/index_bottom.jsp"%>
然后引入模块对应的头部文件和导航文件等,参考权限和用户模块即可
6)列表页面(*_list.jsp)
由于angularjs的单页面开发特性只在模块首页中使用完整的html元素,其余页面均使用html片段即可。
列表页面大致结构如下,开发中请参考demo模块:
<div class="wrapper-md" ng-controller="控制器名">
<div >
<!--标题-->
</div>
<div class="panel panel-default">
<div class="row wrapper">
<!-- 搜索和按钮区-->
</div>
<div class="table-responsive">
<!-- 列表区-->
<table class="table table-striped b-t b-light">
</table>
</div>
<!-- 分页页脚 -->
<%@include file="/common/jsp/page_bottom.jsp"%>
</div>
</div>
7)编辑页面(*_edit.jsp)
删除页面布局与列表页面类似,开发请参考demo模块对应的编辑页面。
变量定义采用ng-model="formData.lbName",这里所有需要提交保存的变量都定义formData变量下的。
变量值的初始化:ng-init="formData.lbName='${osDemoInfo.lbName}'",${osDemoInfo.lbName}这个是springmvc的赋值方式,这里添加了anularjs特性的赋值
提交保存:在按钮上使用属性指令 ng-edit-submit="osDemoInfo(formData)" ,其中osDemoInfo是需要保存的实体
8)查看页面(*_look.jsp)
查看值输出:<label class="form-control">${osDemoInfo.lbName}</label>
删除记录:在按钮上使用属性指令 ng-delete="osDemoInfo({id:'${osDemoInfo.pkId}'})"
9)模块基础js(app.js)
参考demo的app.js,在$stateProvider.state进行自己模块的设置,这里定义的js是按需加载的
$stateProvider.state('规则名', {
url: '/访问展示路径',
views:{
"":{
controller: '控制器',
cache:'false',
templateUrl:function($routeParams){
var url= G.path.moduleTemplatePath+'/osDemoInfo/list.html';
return url;
},
controllerUrl: G.path.moduleResPath+'/osDemoInfo/osDemoInfoListCtrl.js'
}
}
})
这里配置之后,在jsp中可以用ui-sref指令直接进行页面跳转,如:ui-sref="mscAuthCategoryLook({id:'${mscAuthCategory.pkId}'})"
10)页面js
在第9)条中定义controllerUrl指定了页面的js对应的存放位置,其内容按seajs的规则来写的,一般只需要在controller对应的方法中添加业务代码
define(function (require, exports, module) {
module.exports = function(app){
//添加页面控制器的ctrl
app.controller('osDemoInfoListCtrl', ['$scope', function($scope) {
}]);
}
});
4、枚举使用
1)首先在模块下的enums.properties文件中定义好枚举的key和value,注意key均采用2级模式用点间隔,点前面部分用于表示同一个枚举组,后面部分用来区分枚举值,如:
#有无
enumsCommonExist.yes=1
enumsCommonExist.no=0
其中 enumsCommonExist 表示有无这个枚举对象,yes和no分别表示有和无,右侧的表示值。
2)其次再在国际化资源文件中定义枚举选项各值的描述,这样就简单的定义实现了枚举的国际化,如:
enumsCommonExist.yes=有
enumsCommonExist.no=无
3)最后在jsp页面中使用
使用前先要引入bs标签,项目中已经在global.jsp中引入了
<%@ taglib prefix="bs" uri="http://www.bladeray.com/tags/bs" %>
然后使用bs:enums 来输出,其中的key为enums.properties中定义的key点前面的部分,type为可选,可以为:select/radio/checkbox
<bs:enums name="formData.lbType" key="enumsDemo" value="${osDemoInfo.lbType}" type="radio"/>
展示页面直接输出值,这里使用到display属性其可选值有:input(输入-默认)、label(文本)、readOnly(只读)
<bs:enums name="formData.lbType" key="enumsDemo" value="${osDemoInfo.lbType}" display="label"/>
来源:oschina
链接:https://my.oschina.net/u/2351717/blog/702454