2.osframe框架开发说明书

我只是一个虾纸丫 提交于 2019-11-29 14:05:38

开源项目名称:
    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"/>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!