2 jQuery EasyUI 中动态添加选项卡
用于动态添加选项卡
注意:easyui方法名是作为参数传进去的
选中指定的选项卡
判断某个选项卡是否存在
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>tabs选项卡</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<body class="easyui-layout">
<div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
<div title="系统菜单" style="width: 200px" data-options="region:'west'">
<!-- 制作accordion折叠面板
fit:true 自适应(填充父容器西部区域)
-->
<div class="easyui-accordion" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">
<!-- <input type="button" value="添加一个选项卡"> -->
<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
<script type="text/javascript">
$(function(){
//页面加载完成之后为上面的按钮绑定单击事件
$("#but1").click(function(){
//判断系统管理选项卡是否存在
var e = $("#mytabs").tabs('exists','系统管理');
if(e){
//存在,只需要选中即可
$("#mytabs").tabs('select','系统管理');
}else{
//调用tabs对象的add方法动态添加选项卡
$("#mytabs").tabs('add',{
title:'系统管理',
iconCls:'icon-edit',
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
})
}
})
})
</script>
</div>
<div title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div data-options="region:'center'">
<!-- 制作tabs选项卡面板 -->
<div id="mytabs" class="easyui-tabs" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">11</div>
<div data-options="closable:true" title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div style="width: 100px" data-options="region:'east'">east region</div>
<div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>
3 jquery ztree插件使用
官网:ztree.me
目录结构
在页面中引入相关的资源文件
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>
3.1 使用标准json构造ztree
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>
<body class="easyui-layout">
<div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
<div title="系统菜单" style="width: 200px" data-options="region:'west'">
<!-- 制作accordion折叠面板
fit:true 自适应(填充父容器西部区域)
-->
<div class="easyui-accordion" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">
<!-- <input type="button" value="添加一个选项卡"> -->
<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
<script type="text/javascript">
$(function(){
//页面加载完成之后为上面的按钮绑定单击事件
$("#but1").click(function(){
//判断系统管理选项卡是否存在
var e = $("#mytabs").tabs('exists','系统管理');
if(e){
//存在,只需要选中即可
$("#mytabs").tabs('select','系统管理');
}else{
//调用tabs对象的add方法动态添加选项卡
$("#mytabs").tabs('add',{
title:'系统管理',
iconCls:'icon-edit',
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
})
}
})
})
</script>
</div>
<div title="面板二">
<!-- 展示ztree效果:使用标准json数据构造ztree树 -->
<ul id="ztree1" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting = {};
//构造节点数据
var zNodes = [
{"name":"节点一","children":[
{"name":"节点一_1"},
{"name":"节点一_2"}
]},//每个json对象表示一个节点数据
{"name":"节点二"},
{"name":"节点三"}
];
$.fn.zTree.init($("#ztree1"), setting, zNodes);
})
</script>
</div>
<div title="面板三">33</div>
</div>
</div>
<div data-options="region:'center'">
<!-- 制作tabs选项卡面板 -->
<div id="mytabs" class="easyui-tabs" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">11</div>
<div data-options="closable:true" title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div style="width: 100px" data-options="region:'east'">east region</div>
<div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>
3.2 使用简单json构造ztree(重点)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>
<body class="easyui-layout">
<div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
<div title="系统菜单" style="width: 200px" data-options="region:'west'">
<!-- 制作accordion折叠面板
fit:true 自适应(填充父容器西部区域)
-->
<div class="easyui-accordion" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">
<!-- <input type="button" value="添加一个选项卡"> -->
<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
<script type="text/javascript">
$(function(){
//页面加载完成之后为上面的按钮绑定单击事件
$("#but1").click(function(){
//判断系统管理选项卡是否存在
var e = $("#mytabs").tabs('exists','系统管理');
if(e){
//存在,只需要选中即可
$("#mytabs").tabs('select','系统管理');
}else{
//调用tabs对象的add方法动态添加选项卡
$("#mytabs").tabs('add',{
title:'系统管理',
iconCls:'icon-edit',
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
})
}
})
})
</script>
</div>
<div title="面板二">
<!-- 展示ztree效果:使用标准json数据构造ztree树 -->
<ul id="ztree1" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting = {};
//构造节点数据
var zNodes = [
{"name":"节点一","children":[
{"name":"节点一_1"},
{"name":"节点一_2"}
]},//每个json对象表示一个节点数据
{"name":"节点二"},
{"name":"节点三"}
];
$.fn.zTree.init($("#ztree1"), setting, zNodes);
})
</script>
</div>
<div title="面板三">
<!-- 展示ztree效果:简单json数据构造ztree树 -->
<ul id="ztree2" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting2 = {
data: {
simpleData: {
enable: true//使用简单json数据构造ztree节点
}
}
};
//构造节点数据
var zNodes2 = [
{"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
{"id":"2","pId":"1","name":"节点二"},
{"id":"3","pId":"2","name":"节点三"}
];
$.fn.zTree.init($("#ztree2"), setting2, zNodes2);
})
</script>
</div>
</div>
</div>
<div data-options="region:'center'">
<!-- 制作tabs选项卡面板 -->
<div id="mytabs" class="easyui-tabs" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">11</div>
<div data-options="closable:true" title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div style="width: 100px" data-options="region:'east'">east region</div>
<div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>
扫描二维码关注公众号,回复:
1115805 查看本文章
3.3 发送ajax请求获取json数据构造ztree树
//jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
$.post(url,{},function(){},'json');
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>
<body class="easyui-layout">
<div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
<div title="系统菜单" style="width: 200px" data-options="region:'west'">
<!-- 制作accordion折叠面板
fit:true 自适应(填充父容器西部区域)
-->
<div class="easyui-accordion" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">
<!-- <input type="button" value="添加一个选项卡"> -->
<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
<script type="text/javascript">
$(function(){
//页面加载完成之后为上面的按钮绑定单击事件
$("#but1").click(function(){
//判断系统管理选项卡是否存在
var e = $("#mytabs").tabs('exists','系统管理');
if(e){
//存在,只需要选中即可
$("#mytabs").tabs('select','系统管理');
}else{
//调用tabs对象的add方法动态添加选项卡
$("#mytabs").tabs('add',{
title:'系统管理',
iconCls:'icon-edit',
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
})
}
})
})
</script>
</div>
<div title="面板二">
<!-- 展示ztree效果:使用标准json数据构造ztree树 -->
<ul id="ztree1" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting = {};
//构造节点数据
var zNodes = [
{"name":"节点一","children":[
{"name":"节点一_1"},
{"name":"节点一_2"}
]},//每个json对象表示一个节点数据
{"name":"节点二"},
{"name":"节点三"}
];
$.fn.zTree.init($("#ztree1"), setting, zNodes);
})
</script>
</div>
<div title="面板三">
<!-- 展示ztree效果:简单json数据构造ztree树 -->
<ul id="ztree2" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting2 = {
data: {
simpleData: {
enable: true//使用简单json数据构造ztree节点
}
}
};
//构造节点数据
var zNodes2 = [
{"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
{"id":"2","pId":"1","name":"节点二"},
{"id":"3","pId":"2","name":"节点三"}
];
$.fn.zTree.init($("#ztree2"), setting2, zNodes2);
})
</script>
</div>
<div title="面板四">
<!-- 展示ztree效果:发送ajax请求获取json数据构造ztree树 -->
<ul id="ztree3" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting3 = {
data: {
simpleData: {
enable: true//使用简单json数据构造ztree节点
}
}
};
//发送ajax请求,获取json数据
//jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
var url = "${pageContext.request.contextPath }/json/menu.json";
$.post(url,{},function(data){
//调用API初始化ztree
$.fn.zTree.init($("#ztree3"), setting3, data);
},'json');
})
</script>
</div>
</div>
</div>
<div data-options="region:'center'">
<!-- 制作tabs选项卡面板 -->
<div id="mytabs" class="easyui-tabs" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">11</div>
<div data-options="closable:true" title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div style="width: 100px" data-options="region:'east'">east region</div>
<div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>
3.4 为ztree提供的API为节点绑定事件动态添加选项卡
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>
<body class="easyui-layout">
<div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
<div title="系统菜单" style="width: 200px" data-options="region:'west'">
<!-- 制作accordion折叠面板
fit:true 自适应(填充父容器西部区域)
-->
<div class="easyui-accordion" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">
<!-- <input type="button" value="添加一个选项卡"> -->
<a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
<script type="text/javascript">
$(function(){
//页面加载完成之后为上面的按钮绑定单击事件
$("#but1").click(function(){
//判断系统管理选项卡是否存在
var e = $("#mytabs").tabs('exists','系统管理');
if(e){
//存在,只需要选中即可
$("#mytabs").tabs('select','系统管理');
}else{
//调用tabs对象的add方法动态添加选项卡
$("#mytabs").tabs('add',{
title:'系统管理',
iconCls:'icon-edit',
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
})
}
})
})
</script>
</div>
<div title="面板二">
<!-- 展示ztree效果:使用标准json数据构造ztree树 -->
<ul id="ztree1" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting = {};
//构造节点数据
var zNodes = [
{"name":"节点一","children":[
{"name":"节点一_1"},
{"name":"节点一_2"}
]},//每个json对象表示一个节点数据
{"name":"节点二"},
{"name":"节点三"}
];
$.fn.zTree.init($("#ztree1"), setting, zNodes);
})
</script>
</div>
<div title="面板三">
<!-- 展示ztree效果:简单json数据构造ztree树 -->
<ul id="ztree2" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting2 = {
data: {
simpleData: {
enable: true//使用简单json数据构造ztree节点
}
}
};
//构造节点数据
var zNodes2 = [
{"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
{"id":"2","pId":"1","name":"节点二"},
{"id":"3","pId":"2","name":"节点三"}
];
$.fn.zTree.init($("#ztree2"), setting2, zNodes2);
})
</script>
</div>
<div title="面板四">
<!-- 展示ztree效果:发送ajax请求获取json数据构造ztree树 -->
<ul id="ztree3" class="ztree"></ul>
<script type="text/javascript">
$(function(){
//页面加载完成后执行这段代码--动态创建ztree
var setting3 = {
data: {
simpleData: {
enable: true//使用简单json数据构造ztree节点
}
},
callback: {
//为ztree节点绑定单击事件
onClick: zTreeOnClick
}
};
//发送ajax请求,获取json数据
//jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
var url = "${pageContext.request.contextPath }/json/menu.json";
$.post(url,{},function(data){
//调用API初始化ztree
$.fn.zTree.init($("#ztree3"), setting3, data);
},'json');
function zTreeOnClick(event, treeId, treeNode) {
if(treeNode.page != undefined){
//判断选项卡是否打开
var e = $("#mytabs").tabs('exists',treeNode.name);
if(e){
//已经存在,选中
$("#mytabs").tabs('select',treeNode.name);
}else{
//说明我们点击的是叶子节点,动态添加选项卡
$("#mytabs").tabs('add',{
title:treeNode.name,
closable:true,
content:'<iframe frameborder="0" width="100%" height="100%" src="'+treeNode.page+'"></iframe>'
})
}
}
};
})
</script>
</div>
</div>
</div>
<div data-options="region:'center'">
<!-- 制作tabs选项卡面板 -->
<div id="mytabs" class="easyui-tabs" data-options="fit:true">
<!-- 使用子div表示每个面板 -->
<div data-options="iconCls:'icon-save'" title="面板一">11</div>
<div data-options="closable:true" title="面板二">22</div>
<div title="面板三">33</div>
</div>
</div>
<div style="width: 100px" data-options="region:'east'">east region</div>
<div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>
4 数据建模工具PowerDesigner使用方式
设计一张表,保存之后是一个.pdm文件
选择database>>generate database
直接拖进navicat
设计两张表,创建外键关联,从左边拉到右边(子表拉到父表)
5 myeclipse翻转引擎插件使用
第一步:切换到视图window>>open Perspective>>MyEclipse Hibernate
第二步:新建一个java项目,创建包com.zcl.bos.domain
项目右键>>MyEclipse>>Project Facets>>Install Hibernate Facet
第三步:重新切回MyEclipse Hibernate视图,找到需要的表,右键>>Hibernate Reverse engineering
注意:映射文件中catalog建议去掉
session(User.class,1)
select * from t_user where id=1;
select *from bos32.t_user where id=1;
6 项目底层代码构建(重点)
6.1 持久层代码抽取
IBaseDao接口
package com.zcl.bos.dao.base;
import java.io.Serializable;
import java.util.List;
/**
* 持久层通用接口
* @author Administrator
*
* @param <T>
*/
public interface IBaseDao<T> {
public void add(T entity);
public void delete(T entity);
public void update(T entity);
public T findById(Serializable id);
public List<T> findAll();
}
BaseDaoImpl<T>实现类
关键点:获得entityClass 和 注入sessionFactory
package com.zcl.bos.dao.base.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.zcl.bos.dao.base.IBaseDao;
/**
* 持久层通用实现
* @author Administrator
*
* @param <T>
*/
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
//代表的是某个实体的类型
private Class<T> entityClass;
//因为使用注解开发,无法直接创建HibernateDaoSupport模板
@Resource //根据类型注入spring工厂中的会话工厂对象sessionFactory
public void setMySessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
//在父类BaseDaoImpl的构造方法中动态获得entityClass
public BaseDaoImpl(){
ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得父类上声明的泛型数组
Type[] actualTypeArguments = superclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
public void add(T entity) {
this.getHibernateTemplate().save(entity);
}
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
}
public List<T> findAll() {
String hql = "FROM "+entityClass.getSimpleName();
return (List<T>) this.getHibernateTemplate().find(hql);
}
}
6.2 表现层代码抽取
BaseAction<T>
package com.zcl.bos.web.action.base;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 表现层通用实现
* @author Administrator
*
* @param <T>
*/
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
//模型对象
private T model;
//在构造方法中动态获取实体类型,通过反射来创建model对象
public BaseAction(){
ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获取BaseAction上声明的泛型数组
Type[] actualTypeArguments = superclass.getActualTypeArguments();
//实现类
Class<T> entityClass = (Class<T>) actualTypeArguments[0];
//通过反射来创建对象
try {
model = entityClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public T getModel() {
return model;
}
}
6.3 测试BaseDao,在BaseDaoImpl的构造方法中设置断点,进行查看(项目需要重新发布)
IUserDao
package com.zcl.bos.dao;
import com.zcl.bos.dao.base.IBaseDao;
import com.zcl.bos.domain.User;
public interface IUserDao extends IBaseDao<User> {
}
UserDaoImpl
package com.zcl.bos.dao.impl;
import org.springframework.stereotype.Repository;
import com.zcl.bos.dao.IUserDao;
import com.zcl.bos.dao.base.impl.BaseDaoImpl;
import com.zcl.bos.domain.User;
@Repository
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {
}
6.4 测试BaseAction
UserAction
package com.zcl.bos.web.action;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.zcl.bos.domain.User;
import com.zcl.bos.web.action.base.BaseAction;
@Controller
//@Scope("prototype")//原型,多例,在项目启动的时候不会创建实例,只有单例对象才会在项目启动的时候创建实例
public class UserAction extends BaseAction<User> {
}
7 实现用户登陆