登录权限、增加界面下拉框
- 一、登录权限
- 前言
- 1、 根据不同的用户看到不同的菜单
- 1.1需要一个权限中间表RolePermission实体类
- 1.2 RolePermissionDao方法
- 1.3 修改PermissionDao,在原来方法的基础上重载一个方法,方法中的参数不同
- 1.4 修改PermissionAction实现管理树形菜单
- 二、增加界面以及下拉菜单
- 1.修改后台增加界面
- 效果图
- 2.实现分类中的下拉框
- 2.1 Category(类别表)实体类
- 2.2 CategoryDao方法(查询所有类别)
- 2.3 CategoryAction业务逻辑层
- 2.4 配置xml
- 2.5 book.js事件
- book.js
- 最终效果
一、登录权限
前言
上篇文章我们分析了权限划分,现在来用代码实现。
权限划分分析的路径:
https://blog.csdn.net/qq_47906421/article/details/107142609
1、 根据不同的用户看到不同的菜单
1.1需要一个权限中间表RolePermission实体类
package com.meng.entity;
public class RolePermission {
private long rid;
private long pid;
public long getRid() {
return rid;
}
public void setRid(long rid) {
this.rid = rid;
}
public long getPid() {
return pid;
}
public void setPid(long pid) {
this.pid = pid;
}
public RolePermission() {
super();
}
public RolePermission(long rid, long pid) {
super();
this.rid = rid;
this.pid = pid;
}
@Override
public String toString() {
return "RolePermission [rid=" + rid + ", pid=" + pid + "]";
}
}
1.2 RolePermissionDao方法
根据角色编号(rid)进行查询
package com.meng.dao;
import java.util.List;
import com.meng.entity.RolePermission;
import com.meng.util.BaseDao;
import com.meng.util.PageBean;
public class RolePermissionDao extends BaseDao<RolePermission> {
public List<RolePermission> list(RolePermission rolePermission,PageBean pageBean) throws Throwable{
String sql="select * from t_easyui_Role_Permission where true";
long rid=rolePermission.getRid();
if(rid!=0) {
sql+=" and rid="+rid;
}
return super.executeQuery(sql, pageBean, RolePermission.class);
}
}
1.3 修改PermissionDao,在原来方法的基础上重载一个方法,方法中的参数不同
package com.meng.dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.meng.entity.Permission;
import com.meng.util.BaseDao;
import com.meng.util.BuildTree;
import com.meng.util.PageBean;
import com.meng.vo.TreeVo;
public class PermissionDao extends BaseDao<Permission> {
/**
* 是直接从数据库中获取到数据
* @param permission
* @param pageBean
* @return
* @throws Exception
*/
public List<Permission> list(Permission permission,PageBean pageBean) throws Exception {
String sql = "select * from t_easyui_Permission";
return super.executeQuery(sql, pageBean, Permission.class);
}
// 重载list方法
public List<Permission> listPermission(String pids,PageBean pageBean) throws Throwable {
String sql = "select * from t_easyui_Permission where id in ("+pids+")";
return super.executeQuery(sql, pageBean, Permission.class);
}
/**
* 能够将数据库中的数据,体现父子结构
* @param permission
* @param pageBean
* @return
* @throws Exception
*/
public List<TreeVo<Permission>> topNode(Permission permission,PageBean pageBean) throws Throwable {
List<Permission> list = this.list(permission, pageBean);
List<TreeVo<Permission>> nodes = new ArrayList<TreeVo<Permission>>();
TreeVo treeVo = null;
for (Permission p : list) {
treeVo = new TreeVo();
treeVo.setId(p.getId()+"");
treeVo.setText(p.getName());
treeVo.setParentId(p.getPid()+"");
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("self", p);
treeVo.setAttributes(attributes);
nodes.add(treeVo);
}
return BuildTree.buildList(nodes,"0");
}
// 重载
public List<TreeVo<Permission>> topNodePermission(String pids,PageBean pageBean) throws Throwable{
List<Permission> list = this.listPermission(pids, pageBean);
List<TreeVo<Permission>> nodes=new ArrayList<TreeVo<Permission>>();
TreeVo treeVo=null;
for (Permission p : list) {
treeVo=new TreeVo<>();
treeVo.setId(p.getId()+"");
treeVo.setText(p.getName());
treeVo.setParentId(p.getPid()+"");
Map<String, Object> attributes=new HashMap<String, Object>();
attributes.put("self", p);
treeVo.setAttributes(attributes);
nodes.add(treeVo);
}
// 0 :可以指定哪个节点为父节点,选择自己想要的菜单
return BuildTree.buildList(nodes,"0");
}
}
1.4 修改PermissionAction实现管理树形菜单
package com.meng.web;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.meng.dao.PermissionDao;
import com.meng.dao.RolePermissionDao;
import com.meng.entity.Permission;
import com.meng.entity.RolePermission;
import com.meng.entity.User;
import com.meng.util.ResponseUtil;
import com.meng.vo.TreeVo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriven;
public class PermissionAction extends ActionSupport implements ModelDriven<Permission> {
private Permission permission = new Permission();
private PermissionDao permissionDao = new PermissionDao();
private RolePermissionDao rolePermissionDao=new RolePermissionDao();
@Override
public Permission getModel() {
return permission;
}
//第二种方法
public String menuTree(HttpServletRequest req,HttpServletResponse resp) throws Throwable {
try {
User current = (User) req.getSession().getAttribute("current");
RolePermission rolePermission=new RolePermission();
rolePermission.setRid(current.getType());
List<RolePermission> rolePermissions = this.rolePermissionDao.list(rolePermission, null);
StringBuilder pids=new StringBuilder();
// 0,1,2,3,4,5...
for (RolePermission rp: rolePermissions) {
pids.append(",").append(rp.getPid());
}
List<TreeVo<Permission>> topNodePermission = this.permissionDao.topNodePermission(pids.substring(1), null);
// ResponseUtil.writeJson(resp, this.permissionDao.topNode(null, null));
ResponseUtil.writeJson(resp,topNodePermission);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
// 结果码的配置就是为了,在mvc.xml中寻找到底是重定向还是转发
return null;
}
}
二、增加界面以及下拉菜单
1.修改后台增加界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书籍新增</title>
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/static/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/static/js/easyui/themes/icon.css">
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/static/js/easyui/jquery.easyui.min.js"></script>
<script src="${pageContext.request.contextPath}/static/js/book.js"></script>
</head>
<body>
<div style="margin:20px 0;"></div>
<div class="easyui-panel" title="已下架书籍" style="width:100%;padding:30px 60px;">
<form id="ff" action="${pageContext.request.contextPath}/book.action?methodName=add" method="post">
<div style="margin-bottom:20px">
<input class="easyui-textbox" name="name" style="width:100%" data-options="label:'书名:',required:true">
</div>
<div style="margin-bottom:20px">
<input id="cid" name="cid" value="" label="类别" >
<%--<select class="easyui-combobox" name="cid" label="类别" style="width:100%">--%>
<%--<option value="1">文艺</option>--%>
<%--<option value="2">小说</option>--%>
<%--<option value="3">青春</option>--%>
<%--</select>--%>
</div>
<div style="margin-bottom:20px">
<input class="easyui-textbox" name="author" style="width:100%" data-options="label:'作者:',required:true">
</div>
<div style="margin-bottom:20px">
<input class="easyui-textbox" name="price" style="width:100%"
data-options="label:'价格:',required:true">
</div>
<div style="margin-bottom:20px">
<input class="easyui-textbox" name="publishing" style="width:100%"
data-options="label:'出版社:',required:true">
</div>
<div style="margin-bottom:20px">
<input class="easyui-textbox" name="description" style="width:100%;height:60px"
data-options="label:'简介:',required:true">
</div>
<%--默认未上架--%>
<input type="hidden" name="state" value="1">
<%--默认起始销量为0--%>
<input type="hidden" name="sales" value="0">
</form>
<div style="text-align:center;padding:5px 0">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="submitForm()" style="width:80px">Submit</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()" style="width:80px">Clear</a>
</div>
</div>
<script>
$(function () {
$('#cid').combobox({
url:'${pageContext.request.contextPath}/category.action?methodName=list',
valueField:'id',
textField:'name'
});
});
function submitForm() {
$('#ff').form('submit',{
success:function (param) {
$('#ff').form('clear');
}
});
}
function clearForm() {
$('#ff').form('clear');
}
</script>
</body>
</html>
效果图
2.实现分类中的下拉框
现在的下拉框里是没有任何文字的,我们需要实现下拉框出现分类字段。
2.1 Category(类别表)实体类
package com.meng.entity;
public class Category {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Category [id=" + id + ", name=" + name + "]";
}
public Category(long id, String name) {
super();
this.id = id;
this.name = name;
}
public Category() {
super();
}
}
2.2 CategoryDao方法(查询所有类别)
package com.meng.dao;
import java.util.List;
import com.meng.entity.Category;
import com.meng.util.BaseDao;
import com.meng.util.PageBean;
public class CategoryDao extends BaseDao<Category>{
public List<Category> list(Category category,PageBean pageBean) throws Exception{
String sql="select * from t_easyui_category";
return super.executeQuery(sql, pageBean, Category.class);
}
}
2.3 CategoryAction业务逻辑层
package com.meng.web;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.meng.dao.CategoryDao;
import com.meng.entity.Category;
import com.meng.util.ResponseUtil;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriven;
public class CategoryAction extends ActionSupport implements ModelDriven<Category> {
private CategoryDao categoryDao=new CategoryDao();
private Category category=new Category();
@Override
public Category getModel() {
return category;
}
public String combobox(HttpServletRequest req,HttpServletResponse resp) {
try {
List<Category> list = this.categoryDao.list(null, null);
ResponseUtil.writeJson(resp, list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
2.4 配置xml
<action path="/category" type="com.meng.web.CategoryAction">
</action>
2.5 book.js事件
根据它的类别名编写事件
book.js
$(function(){
var ctx=$("#ctx").val();
$('#cid').combobox({
url:ctx+'/category.action?methodName=combobox',
valueField:'id',
textField:'name'
});
})
最终效果
下章分享网上书城的首页:书籍分类列表