Java自定義簡(jiǎn)單標(biāo)簽實(shí)例
更新時(shí)間:2013年07月20日 16:03:02 作者:
Java自定義簡(jiǎn)單標(biāo)簽可以方便的在頁(yè)面輸出信息,并且對(duì)于權(quán)限的控制,和對(duì)于Jsp標(biāo)簽和servlet代碼的分離有著很好的作用
下面將以權(quán)限的控制為例自定義一個(gè)標(biāo)簽:
一、標(biāo)簽類型
復(fù)制代碼 代碼如下:
<wxt:per uri="${pageContext.request.contextPath }/privilege/list"></wxt:per>
步驟:
1.自定義一個(gè)類PerssionTag 繼承SimpleTagSupport(自定義標(biāo)簽一般都會(huì)繼承這個(gè)類)
復(fù)制代碼 代碼如下:
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;
/**
*
* @說(shuō)明 自定義標(biāo)簽
*/
public class PerssionTag extends SimpleTagSupport {
//自定義標(biāo)簽屬性,用于標(biāo)簽傳入?yún)?shù)
private String uri;
//接收標(biāo)簽傳入的參數(shù)
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) {
//用戶登陸判斷用戶權(quán)限
List<String> list = new ArrayList<String>();
//獲取用戶的角色
Set<Role> role = user.getRole();
for(Role r:role) {
//獲取角色對(duì)應(yīng)的權(quán)限
Set<Privilege> privilege = r.getPrivilege();
for(Privilege p:privilege) {
//獲取權(quán)限對(duì)應(yīng)的資源
Set<Resource> res = p.getResource();
for(Resource re:res) {
list.add(re.getUri());
}
}
}
for(String ur:list) {
//判斷用戶的權(quán)限
if(ur.equals(uri)) {
this.getJspBody().invoke(null); //有權(quán)限輸出標(biāo)簽體內(nèi)容
}
}
}
}
}
2.在WEB-INF下創(chuàng)建tld文件描述標(biāo)簽。
復(fù)制代碼 代碼如下:
<?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><!-- 標(biāo)簽名 -->
<tag-class>cn.com.liveuc.privilege.tag.PerssionTag</tag-class>
<body-content>scriptless</body-content>
<!-- 標(biāo)簽屬性 -->
<attribute>
<name>uri</name><!-- 屬性名稱 -->
<required>true</required><!-- 是否必須 -->
<rtexprvalue>true</rtexprvalue><!-- 是否為動(dòng)態(tài)標(biāo)簽 -->
</attribute>
</tag>
</taglib>
3.運(yùn)用標(biāo)簽
在Jsp頁(yè)面導(dǎo)入標(biāo)簽:
<A href="mailto:%@taglib prefix='wxt' uri='/wxt' %">%@taglib prefix="wxt" uri="/wxt" %</A>
運(yùn)用標(biāo)簽:
<wxt:per uri="${pageContext.request.contextPath }/user/list">
<a href="${pageContext.request.contextPath }/user/list" target="reight">用戶管理</a>
</wxt:per>
用戶權(quán)限包含uri資源的將會(huì)輸出標(biāo)簽內(nèi)容。
您可能感興趣的文章:
- JavaWeb開(kāi)發(fā)之JSTL標(biāo)簽庫(kù)的使用、 自定義EL函數(shù)、自定義標(biāo)簽(帶屬性的、帶標(biāo)簽體的)
- javaWeb自定義標(biāo)簽用法實(shí)例詳解
- JSP自定義標(biāo)簽-標(biāo)簽屬性_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java開(kāi)發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽
- java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡(jiǎn)介
- java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容
- Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽實(shí)例
- java使用正則表達(dá)式過(guò)濾html標(biāo)簽
- Java自定義標(biāo)簽用法實(shí)例分析
相關(guān)文章
mybatis plus代碼生成工具的實(shí)現(xiàn)代碼
這篇文章主要介紹了mybatis plus代碼生成工具的實(shí)現(xiàn)代碼,需要的朋友可以參考下2021-04-04SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法
這篇文章主要為大家介紹了SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Spring Boot實(shí)現(xiàn)qq郵箱驗(yàn)證碼注冊(cè)和登錄驗(yàn)證功能
這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)qq郵箱驗(yàn)證碼注冊(cè)和登錄驗(yàn)證功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12深入理解java內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)
這篇文章主要介紹了Java多線程之內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)的深入理解新的和用法,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Java虛擬機(jī)JVM優(yōu)化實(shí)戰(zhàn)的過(guò)程全記錄
有人說(shuō)Java之所以能夠崛起,JVM功不可沒(méi)。Java虛擬機(jī)最初服務(wù)于讓Java語(yǔ)言凌駕于平臺(tái)之上,實(shí)現(xiàn)“編寫(xiě)一次,到處運(yùn)行”,那么下面這篇文章主要給大家分享了個(gè)關(guān)于Java虛擬機(jī)JVM優(yōu)化實(shí)戰(zhàn)的過(guò)程全記錄,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08SpringBoot整合JWT的實(shí)現(xiàn)示例
JWT是目前比較流行的跨域認(rèn)證解決方案,本文主要介紹了SpringBoot整合JWT的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01