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

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

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


      servlet-api.jar
      jsp-api.jar
  
 

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

或者用maven地址


     	<dependency>
         	<groupId>javax.servlet</groupId>
     		<artifactId>javax.servlet-api</artifactId>
     		<version>3.0.1</version>
     	</dependency>
     	<dependency>
     		<groupId>javax.servlet.jsp</groupId>
     		<artifactId>jsp-api</artifactId>
     		<version>2.1</version>
     		<scope>provided</scope>
     	</dependency>
     	<dependency>
     		<groupId>javax.servlet</groupId>
     		<artifactId>jstl</artifactId>
     		<version>1.2</version>
     	</dependency>
  
 

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

在tld文件中写入以下内容


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

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


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

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


      package com.xinpin.front.web.tag;
      import java.io.IOException;
      import java.lang.reflect.Field;
      import java.util.Date;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.jsp.JspException;
      import javax.servlet.jsp.JspWriter;
      import javax.servlet.jsp.tagext.TagSupport;
      import com.xinpin.front.web.constantsUrl.Url;
      /**
       * jsp自定义标签
       * 先导入servlet-api和jsp-api的jar包,
       * @author xindong
       *
       */
      public class xpo extends TagSupport {
              private static final long serialVersionUID = -8855151786721428161L;
              private String fileName;
             /* // 反射获取当前类和父类的某个公有属性
       Field gradeField = student.getClass().getDeclaredField("mGrade");
       // 获取属性值
       System.out.println(" my grade is : " + gradeField.getInt(student));
       // 设置属性值
       gradeField.set(student, 10);
       System.out.println(" my grade is : " + gradeField.getInt(student));*/
              public String getFileName() {
     			return fileName;
      		}
     		public void setFileName(String fileName) {
     			this.fileName = fileName;
      		}
              public int doStartTag() throws JspException {
                    try {
                 	// 反射获取接口或者类的对象,这里使用全类名获取,
                 	   final Class<?> cls = Class.forName("com.xinpin.front.web.constantsUrl.Url");
                 	   //获取指定属性的对象,这个Field对象代表着一个属性,
                 	   Field urlField =  cls.getField(fileName);
                        // 获取属性值
                         System.out.println(" my field is : " + urlField.get(Url.class));
                        // 设置属性值
                      /* urlField.set(cls, "123");
       System.out.println(" my grade is : " + urlField.getInt(cls));*/
                         HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
                         JspWriter out = pageContext.getOut();
                         //在jsp上面打印出这个属性的值
                          out.println(urlField.get(Url.class));
                          } catch (IOException e) {
                                   e.printStackTrace();
                          } catch (IllegalArgumentException e) {
     						// TODO Auto-generated catch block
      						e.printStackTrace();
      					} catch (IllegalAccessException e) {
     						// TODO Auto-generated catch block
      						e.printStackTrace();
      					} catch (ClassNotFoundException e) {
     						// TODO Auto-generated catch block
      						e.printStackTrace();
      					} catch (NoSuchFieldException e) {
     						// TODO Auto-generated catch block
      						e.printStackTrace();
      					} catch (SecurityException e) {
     						// TODO Auto-generated catch block
      						e.printStackTrace();
      					}
                    //这里固定这样写,不知道为啥
                    return SKIP_BODY;
               }
      }
  
 


5、编写一个jsp页面:


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


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



 

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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