登录权限、增加界面下拉框

一、登录权限

前言

上篇文章我们分析了权限划分,现在来用代码实现。
权限划分分析的路径:
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'
	});
})

最终效果

在这里插入图片描述
下章分享网上书城的首页:书籍分类列表

猜你喜欢

转载自blog.csdn.net/qq_47906421/article/details/107187714