自定义标签(TagSupport )

自定义标签(TagSupport )

大家好,又见面了,我是你们的朋友全栈君。

定义最简单的标签

自定义标签采用Default Adapter模式(缺省适配模式)

Java代码

代码语言:javascript代码运行次数:0运行复制 1 //最简单的标签

2 public class LangHuaTag extends TagSupport {

3 private long startTime;

4 private long endTime;

5

6 public int doStartTag() throws JspException {

7 startTime = System.currentTimeMillis();

8 //表示定制标记里面有所包括的JSP页面

9 return TagSupport.EVAL_BODY_INCLUDE;

10 }

11 public int doEndTag() throws JspException {

12 endTime = System.currentTimeMillis();

13 long elapsed = endTime - startTime;

14 try {

15 JspWriter out = pageContext.getOut();

16 out.println("runtime is "+ elapsed);

17 } catch (IOException e) {

18 e.printStackTrace();

19 }

20 //表示JSP页面继续运行

21 return TagSupport.EVAL_PAGE;

22 }

23

24 }

25 //代属性的标签

26 public class DateTag extends TagSupport {

27 private String pattern = "yyyy-MM-dd hh:mm:ss";

28 private Date date;

29 //必须要有Set方法,因为是属性可以设值

30 public void setPattern(String pattern) {

31 this.pattern = pattern;

32 }

33

34 public void setDate(Date date) {

35 this.date = date;

36 }

37

38 public int doEndTag() throws JspException {

39 SimpleDateFormat sdf = new SimpleDateFormat(pattern);

40 //如果没有就是当前时间

41 if(date==null){

42 date = new Date();

43 }

44 JspWriter out = pageContext.getOut();

45 try {

46 out.print(sdf.format(date));

47 } catch (IOException e) {

48 e.printStackTrace();

49 }

50 return TagSupport.EVAL_PAGE;

51 }

52 }

53

54 /**

55 * 循环输出

56 * @author Administrator

57 *

58 */

59 public class LoopTag extends TagSupport {

60 private int times =0;

61 //Set方法设值

62 public void setTimes(int times) {

63 this.times = times;

64 }

65

66 public int doStartTag() throws JspException {

67 //表示定制标记里面有所包括的JSP页面

68 return TagSupport.EVAL_BODY_INCLUDE;

69 }

70

71 public int doAfterBody() throws JspException {

72 if(times>0){

73 times--;

74 //表示双从标签开始输入

75 return TagSupport.EVAL_BODY_AGAIN;

76 }

77 //表示结束,忽略标签内部的内容

78 return TagSupport.SKIP_BODY;

79 }

80

81 } 配置文件

Xml代码

代码语言:javascript代码运行次数:0运行复制 1

2

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

5 version="2.0">

6 1.0

7 util

8 http://langhua.com/taglib/util

9

10 timer

11 com.langhua.tagsupport.LangHuaTag

12 JSP

13

14

15

16

17 date

18 com.langhua.tagsupport.DateTag

19 empty

20

21

22

23 time

24

25 false

26

27 true

28

29

30 pattern

31 true

32 false

33

34

35

36

37 loop

38 com.langhua.tagsupport.LoopTag

39 JSP

40

41

42

43 times

44

45 true

46

47 true

48

49

50 JSP页面

Html代码

代码语言:javascript代码运行次数:0运行复制 1 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>

2

3

4

5

6

7

8 <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>

9

10

11

12

13 TagSupport的流程图

SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。

SKIP_PAGE 忽略标签后面的JSP内容。

EVAL_PAGE 处理标签后,继续处理JSP后面的内容。

EVAL_BODY_BUFFERED 表示需要处理标签体。

EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法

EVAL_BODY_AGAIN 对标签体循环处理。

上面转自http://zhuhuide2004.iteye.com/blog/555737

下面是项目中的应用。

在做权限的时候,不同角色用户看到不同的权限,比如:一个页面上的添加按钮,有的角色看的到,有的角色看不到,必须判断角色是否有这个权限。

代码语言:javascript代码运行次数:0运行复制 1 public class MenuTLD extends TagSupport {

2

3

4 private String menuStr;

5

6 @Override

7 public int doStartTag() throws JspException {

8 // TODO Auto-generated method stub

9 HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession();

10 List userMenus = (List) session.getAttribute("sysMenuBeans");

11 for (SysMenuBean sysMenuBean : userMenus) {

12 try {

13 if(sysMenuBean.getUrl()!=null&&sysMenuBean.getUrl().contains(menuStr))

14 {

15

16 return TagSupport.EVAL_BODY_INCLUDE;

17 }

18 } catch (Exception e) {

19 // TODO Auto-generated catch block

20 return TagSupport.SKIP_BODY;

21 }

22 }

23 return TagSupport.SKIP_BODY;

24 }

25

26 public String getMenuStr() {

27 return menuStr;

28 }

29

30 public void setMenuStr(String menuStr) {

31 this.menuStr = menuStr;

32 }

33

34 }其内容是:

代码语言:javascript代码运行次数:0运行复制

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

1.0

1.2

menu

http://www.dsdl.com/dev/jsp/menu

DSDL menu 1.1 core library

menu

com.dsdl.common.menutld.MenuTLD

JSP

menu

menuStr

false

false

type

MenuId

在页面中的应用:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155019.html原文链接:https://javaforall.cn

相关推荐

如何查看电脑内存条信息?轻松获取RAM详细参数指南!
世界杯参赛队意大利简介(含球星教练历史及晋级历程)
365bet在线体育投注

世界杯参赛队意大利简介(含球星教练历史及晋级历程)

⌛ 08-24 👁️ 8035
iphone如何群发短信(如何在iPhone上实现群发短信)
365bet育在线网址

iphone如何群发短信(如何在iPhone上实现群发短信)

⌛ 08-11 👁️ 314
匹配玩游戏的交友软件
365bet育在线网址

匹配玩游戏的交友软件

⌛ 07-21 👁️ 4358
征途2多久开一个新区(征途需要多少时间开一次新区?)
365体育平台靠谱吗

征途2多久开一个新区(征途需要多少时间开一次新区?)

⌛ 08-08 👁️ 8992
电脑截屏后的图片保存到了哪里 一般是在这几个地方
365bet育在线网址

电脑截屏后的图片保存到了哪里 一般是在这几个地方

⌛ 09-03 👁️ 5850
鬼有几种?详解六道轮回中的饿鬼道
365体育平台靠谱吗

鬼有几种?详解六道轮回中的饿鬼道

⌛ 07-08 👁️ 572
手机运行3g怎么变4g 手机如何从3G切换到4G网络详细教程
武则天的故乡,到底是山西,还是四川?
365bet育在线网址

武则天的故乡,到底是山西,还是四川?

⌛ 08-31 👁️ 8376