文档章节

2.osframe框架开发说明书

王春-海子
 王春-海子
发布于 2016/06/28 22:41
字数 1815
阅读 176
收藏 5

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

© 著作权归作者所有

王春-海子
粉丝 7
博文 49
码字总数 11981
作品 0
江北
技术主管
私信 提问
加载中

评论(1)

田雪亭
田雪亭
真心不错 模块化 松耦合了
基于AWCP开发平台实现档案管理系统(预算10万)

【业务需求】 (只要你有能力,价格还可以谈)基于AWCP开发平台完成需求规格说明书要求的功能,最好由北京的团队来实施,可以和客户面对面沟通交流,有自己的UI和前端开发团队,可以基于AWCP平...

曹勇
2017/03/24
25
1
“科研管理系统”外包需求说明

“科研管理系统”外包需求说明书 一、 需求概述: 因业务发展需要,对现有应用系统进行业务流程重构,需求分析整理,重新设计开发出一套配置性更灵活的系统,以满足实际应用,外包内容主要包...

3ilab
2016/09/08
17
0
开源社会网项目架构设计与实施

【业务需求】 一、需求描述 1、结合既有需求整理规范 2、结合项目需求、技术要求设计与构建开发架构、框架; 3、结合开发实施需求在阿里云服务器完成开发服务器环境搭建、码云Git环境管理; ...

zb1484035363906
2017/03/24
6
0
RDIFramework.NET — 系列目录 — 基于.NET的快速信息化系统开发框架

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录 RDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,给用户和开发者最佳的.Net框架部署方案。   框架简单介绍...

yonghu86
2018/06/26
0
0
标准的软件开发过程及各步骤需要编写的文档

文档应该是软件过程的"支持过程类"(请看本版软件过程一文); 一、标准的软件开发过程  软件开发的标准过程包括六个阶段,而六个阶段需要编写的各类文件达14种之多,在每个阶段需要编写哪些文...

import_key
2013/11/04
706
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(五)——接口默认方法

Java8新加入一个特性,允许在接口方法中给定一个默认实现。前提是在方法前面加一个default关键字。 public interface InterfaceMethod {default void say() {System.out.println("hello...

猿敲月下码
6分钟前
4
0
weed3-2.3.3.查询之缓存控制

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 缓存控制,是查询中的重点 框架提供的是控制服务。而非缓存服务本身...

刘之西东
10分钟前
4
0
Java Web 中对 ServletRequest 的一些非常规操作解决方案

1. 前言 ServletRequest 是我们搞 Java Web 经常接触的 Servlet Api 。有些时候我们要经常对其进行一些操作。这里列举一些经常的难点操作。 2. 提取 body 中的数据 前后端交互我们会在 body...

码农小胖哥
58分钟前
29
0
《Dual Encoding U-Net for Retinal Vessel Segmentation》阅读笔记-MICCAI2019

作者:Bo Wang1,2, Shuang Qiu2, and Huiguang He1,2,3 目的:Retinal Vessel Segmentation is an essential step for the early diagnosis of eye-related diseases, such as diabetes and ......

JungleKing
今天
27
0
一次看懂 Https 证书认证

TLS > 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。 如图,TLS...

极客收藏夹
今天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部