自定义标签(TagSupport )

自定义标签(TagSupport )

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

Java代码

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代码

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代码

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

下面是项目中的应用。

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

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 }

其内容是:

"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

在页面中的应用:

相关推荐

帕杰罗v97十万公里感受,v97油耗惊人吗?
热血传奇手游防爆教学技能大揭秘,带你玩转爆率不掉链子
腾达无线路由器怎么样(腾达F323无线路由器怎么样)
苹果手机恢复出厂设置会怎么样?恢复出厂设置后数据还能找回吗?
用ps将手机拍摄的照片进行美化
少康战情室-(上集)中共派41戰機、9軍艦出海 加拿大軍艦穿台海製造緊張情事?#少康戰情室 #張之豪 #張啓楷 #陳鳳馨 #徐弘庭 #李永萍 #李柏毅
国标麻将番种列表
小米3(Mi3/移动3G)版刷机教程
《微信》怎么把图片添加到表情