開源項目名稱:
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