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)