Java自訂簡單標籤執行個體

來源:互聯網
上載者:User
Java自訂簡單標籤可以方便的在頁面輸出資訊,並且對於許可權的控制,和對於Jsp標籤和servlet代碼的分離有著很好的作用 

下面將以許可權的控製為例自訂一個標籤:
一、標籤類型

複製代碼 代碼如下:
<wxt:per uri="${pageContext.request.contextPath }/privilege/list"></wxt:per>


步驟:
1.自訂一個類PerssionTag 繼承SimpleTagSupport(自訂標籤一般都會繼承這個類)

複製代碼 代碼如下:
package cn.com.liveuc.privilege.tag;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import cn.com.liveuc.privilege.model.Privilege;
import cn.com.liveuc.privilege.model.Resource;
import cn.com.liveuc.privilege.model.Role;
import cn.com.liveuc.privilege.model.User;
/**
 *
 * @說明   自訂標籤
 */
public class PerssionTag extends SimpleTagSupport {

 //自訂標籤屬性,用於標籤傳入參數
 private String uri;

 //接收標籤傳入的參數
 public void setUri(String uri) {
  this.uri = uri;
 }
 @Override
 public void doTag() throws JspException, IOException {
  //擷取使用者登陸後儲存的Session
  PageContext page = (PageContext) this.getJspContext();
  User user = (User) page.getSession().getAttribute("login");
  //如果使用者登陸
  if(user != null) {
   //使用者登陸判斷使用者權限
   List<String> list = new ArrayList<String>();
   //擷取使用者的角色
   Set<Role> role = user.getRole();
   for(Role r:role) {
    //擷取角色對應的許可權
    Set<Privilege> privilege = r.getPrivilege();
    for(Privilege p:privilege) {
     //擷取許可權對應的資源
     Set<Resource> res = p.getResource();
     for(Resource re:res) {
      list.add(re.getUri());
     }
    }
   }
   for(String ur:list) {
    //判斷使用者的許可權
    if(ur.equals(uri)) {
     this.getJspBody().invoke(null); //有許可權輸出標籤體內容
    }
   }
  }
 }
}


2.在WEB-INF下建立tld檔案描述標籤。

複製代碼 代碼如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 version="2.0"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
 <description><![CDATA["To make it easier to access dynamic data;
                    the Apache Struts framework includes a library of custom tags.
                    The tags interact with the framework's validation and internationalization features;
                    to ensure that input is correct and output is localized.
                    The Struts Tags can be used with JSP FreeMarker or Velocity."]]></description>
 <display-name>"Struts Tags"</display-name>
 <tlib-version>2.2.3</tlib-version>
 <short-name>s</short-name>
 <uri>/wxt</uri>
 <tag>
  <name>per</name><!-- 標籤名 -->
  <tag-class>cn.com.liveuc.privilege.tag.PerssionTag</tag-class>
  <body-content>scriptless</body-content>
  <!-- 標籤屬性 -->
  <attribute>
   <name>uri</name><!-- 屬性名稱 -->
   <required>true</required><!-- 是否必須 -->
   <rtexprvalue>true</rtexprvalue><!-- 是否為動態標籤 -->
  </attribute>
 </tag>
</taglib>


3.運用標籤
在Jsp頁面匯入標籤:
<A href="mailto:%@taglib prefix='wxt' uri='/wxt' %">%@taglib prefix="wxt" uri="/wxt" %</A>
運用標籤:
<wxt:per uri="${pageContext.request.contextPath }/user/list">
      <a href="${pageContext.request.contextPath }/user/list" target="reight">使用者管理</a>
</wxt:per>
使用者權限包含uri資源的將會輸出標籤內容。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。