自定义标签
package cn.itcast.crm.tag;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
import org.apache.commons.lang.StringUtils;
import cn.itcast.crm.container.ServiceProvinder;
import cn.itcast.crm.domain.SysMenuPrivilege;
import cn.itcast.crm.domain.SysUser;
import cn.itcast.crm.service.ISysMenuPrivilegeService;
import cn.itcast.crm.util.SessionUtils;
public class CheckMemuTag implements SimpleTag {
private PageContext pageContext;
//标签体
private JspFragment jspFragment;
//<itcast:checkMemu module="${sysMenu.id.menuModule}" privilege="${sysMenu.id.menuPrivilege}">
private String module;
private String privilege;
public void doTag() throws JspException, IOException {
//获取request对象
HttpServletRequest request=(HttpServletRequest)pageContext.getRequest();
//获取当前登陆用户
SysUser sysUser=SessionUtils.getSysUserFormSession(request);
if(sysUser==null){
return;
}
if(sysUser.getSysRole()==null){
return;
}
//获取当前登陆用户对应的权限组id
String roleId=sysUser.getSysRole().getId();
//获取菜单操作权限的业务层 sys_menu_privilege
ISysMenuPrivilegeService sysMenuPrivilegeService=
(ISysMenuPrivilegeService)ServiceProvinder.getService(ISysMenuPrivilegeService.SERVICE_NAME);
//获取菜单操作权限表中的所有数据 sys_menu_privilege,返回值List集合
List<SysMenuPrivilege> list=sysMenuPrivilegeService.findAllSysMenuPrivileges();
//遍历集合
if(list!=null&&list.size()>0){
for(int i=0;i<list.size();i++){
SysMenuPrivilege s=list.get(i);
if(StringUtils.isNotBlank(roleId)&&StringUtils.isNotBlank(module)&&StringUtils.isNotBlank(privilege)){
//比对权限id+模块名称+操作名称
if(roleId.equals(s.getId().getRoleId())&&module.equals(s.getId().getMenuModule())
&&privilege.equals(s.getId().getMenuPrivilege())){
//如果在集合中存在,输出标签体
this.jspFragment.invoke(null);
break;
}
}
}
}
}
public JspTag getParent() {
return null;
}
public void setJspBody(JspFragment jspFragment) {
this.jspFragment=jspFragment;
}
public void setJspContext(JspContext pc) {
this.pageContext=(PageContext) pc;
}
public void setParent(JspTag arg0) {
}
public void setModule(String module) {
this.module = module;
}
public void setPrivilege(String privilege) {
this.privilege = privilege;
}
}
定义的.tld文件
注意module,privilege是标签属性,<required>true</required>必填,<rtexprvalue>true</rtexprvalue>可以用jsp表达式作值
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>myitcast 1.o core library</description>
<display-name>itcast core</display-name>
<tlib-version>1.0</tlib-version>
<short-name>itcast</short-name>
<uri>http://www.itcast.cn/jsp/jstl/core</uri>
<tag>
<name>checkMemu</name>
<tag-class>cn.itcast.crm.tag.CheckMemuTag</tag-class>
<!-- 标签体不能为空 -->
<body-content>scriptless</body-content>
<attribute>
<name>module</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>privilege</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
使用标签
导入
<%@ taglib uri="/WEB-INF/tld/myitcast.tld" prefix="itcast"%>
<c:forEach items="${applicationScope.sysMenus}" var="sysMenu">
<c:if test="${sysMenu.id.menuModule==sysMenu.id.menuPrivilege}">
<itcast:checkMemu module="${sysMenu.id.menuModule}" privilege="${sysMenu.id.menuPrivilege}">
<li><img src="${pageContext.request.contextPath}/ui/images${sysMenu.icon}" width="17" height="17">
<strong>${sysMenu.menuName}</strong>
<c:forEach items="${applicationScope.sysMenus}" var="sysMenuSub">
<c:if test="${sysMenuSub.id.menuModule!=sysMenuSub.id.menuPrivilege
&&sysMenu.id.menuModule==sysMenuSub.id.menuModule}">
<itcast:checkMemu module="${sysMenuSub.id.menuModule}" privilege="${sysMenuSub.id.menuPrivilege}">
<ul>
<li><img src="${pageContext.request.contextPath}/ui/images${sysMenuSub.icon}" width="17" height="17">
<a href="${pageContext.request.contextPath}${sysMenuSub.url}" target="${sysMenuSub.target}">${sysMenuSub.menuName}</a></li>
</ul>
</itcast:checkMemu>
</c:if>
</c:forEach>
</li>
</itcast:checkMemu>
</c:if>
</c:forEach>