jsp自定义标签库引用java属性值

举报
IT 叶新东老师 发表于 2021/12/29 23:35:39 2021/12/29
【摘要】 1、使用之前需要先导入2个jar包   servlet-api.jarjsp-api.jar 如果找不到可以去tomcat的lib目录找! 或者用maven地址 <dependency> <groupId>javax.servlet</groupId> <arti...

1、使用之前需要先导入2个jar包

 


  
  1. servlet-api.jar
  2. jsp-api.jar

如果找不到可以去tomcat的lib目录找!

或者用maven地址


  
  1. <dependency>
  2. <groupId>javax.servlet</groupId>
  3. <artifactId>javax.servlet-api</artifactId>
  4. <version>3.0.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.servlet.jsp</groupId>
  8. <artifactId>jsp-api</artifactId>
  9. <version>2.1</version>
  10. <scope>provided</scope>
  11. </dependency>
  12. <dependency>
  13. <groupId>javax.servlet</groupId>
  14. <artifactId>jstl</artifactId>
  15. <version>1.2</version>
  16. </dependency>

 

2、在WEB-INF下新建一个后缀名为 .tld 的文件,名称随便起,

在tld文件中写入以下内容

 


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taglib>
  3. <tlib-version>1.0</tlib-version>
  4. <jsp-version>1.2</jsp-version>
  5. <tag>
  6. <!--前缀 <xxxx:url fileName="">-->
  7. <name>url</name>
  8. <!--映射类的全局限定名-->
  9. <tag-class>com.xinpin.front.web.tag.xpo</tag-class>
  10. <body-content>empty</body-content>
  11. <!--定义自定义标签的属性,可以有多个-->
  12. <attribute>
  13. <description>命名空间,也是自定义标签的属性--</description>
  14. <!--属性名称-->
  15. <name>fileName</name>
  16. <!--此属性是否是必须的,true表示是,false表示否-->
  17. <required>true</required>
  18. <!--表示这个属性是否可以用JSP的程序段的结果输出,一般为true就好-->
  19. <rtexprvalue>true</rtexprvalue>
  20. </attribute>
  21. </tag>
  22. </taglib>

3、定义一个常量的接口类(接口中的属性默认都是public static final),用来定义输出指定属性的值

 

 


  
  1. package com.xinpin.front.web.constantsUrl;
  2. //接口中的属性默认都是Public static final 类型的,(公共静态常量)
  3. public interface Url {
  4. String LOGIN_URL = "login.view";
  5. }

 

 

4、定义一个类来负责输出常量的值

 


  
  1. package com.xinpin.front.web.tag;
  2. import java.io.IOException;
  3. import java.lang.reflect.Field;
  4. import java.util.Date;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.jsp.JspException;
  7. import javax.servlet.jsp.JspWriter;
  8. import javax.servlet.jsp.tagext.TagSupport;
  9. import com.xinpin.front.web.constantsUrl.Url;
  10. /**
  11. * jsp自定义标签
  12. * 先导入servlet-api和jsp-api的jar包,
  13. * @author xindong
  14. *
  15. */
  16. public class xpo extends TagSupport {
  17. private static final long serialVersionUID = -8855151786721428161L;
  18. private String fileName;
  19. /* // 反射获取当前类和父类的某个公有属性
  20. Field gradeField = student.getClass().getDeclaredField("mGrade");
  21. // 获取属性值
  22. System.out.println(" my grade is : " + gradeField.getInt(student));
  23. // 设置属性值
  24. gradeField.set(student, 10);
  25. System.out.println(" my grade is : " + gradeField.getInt(student));*/
  26. public String getFileName() {
  27. return fileName;
  28. }
  29. public void setFileName(String fileName) {
  30. this.fileName = fileName;
  31. }
  32. public int doStartTag() throws JspException {
  33. try {
  34. // 反射获取接口或者类的对象,这里使用全类名获取,
  35. final Class<?> cls = Class.forName("com.xinpin.front.web.constantsUrl.Url");
  36. //获取指定属性的对象,这个Field对象代表着一个属性,
  37. Field urlField = cls.getField(fileName);
  38. // 获取属性值
  39. System.out.println(" my field is : " + urlField.get(Url.class));
  40. // 设置属性值
  41. /* urlField.set(cls, "123");
  42. System.out.println(" my grade is : " + urlField.getInt(cls));*/
  43. HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
  44. JspWriter out = pageContext.getOut();
  45. //在jsp上面打印出这个属性的值
  46. out.println(urlField.get(Url.class));
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. } catch (IllegalArgumentException e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. } catch (IllegalAccessException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. } catch (ClassNotFoundException e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. } catch (NoSuchFieldException e) {
  59. // TODO Auto-generated catch block
  60. e.printStackTrace();
  61. } catch (SecurityException e) {
  62. // TODO Auto-generated catch block
  63. e.printStackTrace();
  64. }
  65. //这里固定这样写,不知道为啥
  66. return SKIP_BODY;
  67. }
  68. }


5、编写一个jsp页面:

 

 


  
  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <%@taglib uri="/WEB-INF/solid-tags.tld" prefix="xpo"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. File : <xpo:url fileName="LOGIN_URL" />
  12. </body>
  13. </html>


7、运行后的页面时这样的:

 



 

 

 

 

 

 

 

文章来源: yexindong.blog.csdn.net,作者:java叶新东老师,版权归原作者所有,如需转载,请联系作者。

原文链接:yexindong.blog.csdn.net/article/details/53702125

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。