jsp自定义标签库引用java属性值
【摘要】
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)