1. 程式人生 > >Jstl自定義標簽

Jstl自定義標簽

用戶 err span textutils 進行 自己 bsp frame art

第一步:在web-inf下創建一個tld文件

技術分享圖片
<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
    version="
2.1"> <description> <![CDATA[security Tags]]> </description> <tlib-version>1.0</tlib-version> <short-name>security</short-name> <uri>http://www.springsecurity.org/jsp</uri> <tag> <description> <![CDATA[authorize Tag]]> </description> <name>authorize</name> <tag-class
> cn.tms.util.AuthorizeTag </tag-class> <body-content>JSP</body-content> <attribute> <name>URL</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> </tag> </taglib>
authorize.tld

第二步:創建一個類繼承BodyTagSupport

技術分享圖片
package cn.tms.util;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.tagext.BodyTagSupport;

import cn.tms.dao.IPrivilegeDAO;
import cn.tms.dao.IRoleDAO;
import cn.tms.entity.Privilege;
import cn.tms.entity.UserInfo;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
//標簽
public class AuthorizeTag  extends BodyTagSupport {
    //你提供一個用戶名字,我給一個用戶擁有的權限集合,並且操作是在權限的DAO中
        private IPrivilegeDAO privilegeDAO;
        private String URL;
        public String getURL() {  
            return URL;  
        }  
        public void setURL(String uRL) {
            URL = uRL;  
        }  
        @Override  
        public int doStartTag() {
            // 如果URL不空就顯示URL,否則就不顯  
            if (null != URL) {
                getUserDao();
                HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
                UserInfo info=(UserInfo)request.getSession().getAttribute("userinfo");
                List<Privilege> list = privilegeDAO.findAllPrivilegeByUserId(info.getUserid());
                System.out.println(list.size());
                
                for (Privilege item : list) {

                    System.out.println(URL+"==========================");
                    if(item.getUrl().equals(URL)){
                          //正確渲染該標簽
                          return EVAL_BODY_INCLUDE;  
                    }
                }
              
            }  
            return this.SKIP_BODY;  
        }
        public void getUserDao() {
              WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
            privilegeDAO=(IPrivilegeDAO)applicationContext.getBean("IPrivilegeDAO");
        }

}
AuthorizeTag

第三步: 在頁面上使用之前在頁面上添加

<%@taglib prefix="Authorize" uri="http://www.springsecurity.org/jsp" %>
*註意:這裏的URi的地址和web-inf裏面配的地址保持一致
最後使用:
技術分享圖片

這裏Authorize是你自己定義的技術分享圖片

URL是傳入到Authorize裏的,然後和後臺取到的url進行對比,如果一致就在頁面上渲染此標簽,不一致就不渲染此標簽

Jstl自定義標簽