2.osframe框架开发说明书

开源项目名称:
    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的权限管理和登录控制。基础框架中包含了用户管理、权限管理等基础模块,提供了简单的首页门户,能够快速的实现新项目的搭建。
框架特点:
    支持电脑和手机界面的自动智能切换。html

技术交流群:330710190(OSFrame技术交流群) 欢迎你们加入,共同探讨使用过程当中的问题。前端

一、开发前准备知识点
    1)后端开发必备知识熟悉spring mvc、spring、hibernate的基础使用
    2)前端开发必备知识熟悉 angular js 的使用,本项目作为首个开源git

二、模块化支撑
    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-执行页面功能逻辑
    
三、基础页面增删改查功能实现
    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中的一个抽象函数须要自类中实现,因为父类中调用。angularjs

        @Resource
        IBaseDao daobean名称;
        public IBaseDao getBaseDao(){
            return daobean名称;
        }
    4)控制层(web),包含一个控制类
        建立一个控制类,继承BaseController<实体类>
        在类上使用@Controller注解标注控制类,使用@RequestMapping(value = "访问路径")注解映射类的基础访问路径
        实现BaseController的抽象方法
        @Resource
        IBaseService servicebean名称;
        @Override
        protected IBaseService getServiceImp() {
            return servicebean名称;
        }web

    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">spring

                <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) {bootstrap

                }]);
            }
        });后端

四、枚举使用        
    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"/>mvc

相关文章
相关标签/搜索