分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

jsp的自定义标签

发布时间:2023-09-06 01:10责任编辑:苏小强关键词:jsjsp
1.相对于JSTL或Spring等第三方标签库而言的,用来实现项目中特定的功能需求。
2.自定义标签基本的组成部分
①页面上看得见的部分
[1]通过taglib引入标签库
[2]标签本身
②xxx.tld文件:用来注册标签处理器类
③标签处理器类
3.创建一个没有属性没有标签体的自定义标签
①创建自定义标签的处理器类
[1]标准要求:实现接口javax.servlet.jsp.tagext.SimpleTag
[2]实际操作:继承javax.servlet.jsp.tagext.SimpleTagSupport
[3]细节实现:重写doTag()方法
②在xxx.tld文件中注册这个标签处理器类
[1]xxx.tld文件需要放在WEB-INF目录下
[2]编写tld文件声明信息
<description>Atguigu 1.0 core library</description><display-name>Atguigu core</display-name><tlib-version>1.0</tlib-version><short-name>atguigu</short-name><uri>http://www.atguigu.com/survey/tag</uri>

[3]注册自定义标签处理器类

<tag> ????<!-- 标签名 --> ????<name>showTime</name> ?????????<!-- 标签全类名 --> ????<tag-class>com.atguigu.myTag.TagShowTime</tag-class> ?????????<!-- 设置标签体为空 --> ????<body-content>empty</body-content></tag>
③在页面上使用:和使用JSTL等第三方标签库没有区别
 
4.创建一个带属性的自定义标签
①创建自定义标签处理器类
②属性传入方式
[1]处理器类中提供和属性名对应的setXxx()方法
[2]在tld文件中注册这个属性名
<!-- 声明标签的属性 --><attribute> ????<!-- 属性名 --> ????<name>format</name> ?????????<!-- 属性是否必须 --> ????<required>true</required> ?????????<!-- 属性是否支持EL表达式 --> ????<rtexprvalue>true</rtexprvalue></attribute>
5.创建一个带有标签体的自定义标签
①标签体需要执行<!-- EL表达式→Java代码→编译→执行→页面上可以显示的结果 -->
<!-- 其他动态标签→Java代码→编译→执行→页面上可以显示的结果 -->
<!-- HTML标签或普通文本→out.print(xxx)→执行→页面上可以显示的结果 -->
②执行标签体的代码
 
 
public class AuthTag extends SimpleTagSupport { ???private String servletPath; ???@Override ???public void doTag() throws JspException, IOException { ???????//获取页面的上下文对象 ???????PageContext context = (PageContext) getJspContext(); ???????HttpSession session = context.getSession(); ???????Admin admin = (Admin)session.getAttribute(GlobalNames.LOGIN_ADMIN); ???????if(admin!=null){ ???????????//判断是否有权限访问 ???????????String adminName = admin.getAdminName(); ???????????if("admin".equals(adminName)){ ???????????????//显示内容体 ???????????????getJspBody().invoke(null); ???????????????return ; ???????????} ???????????????????????ServletContext servletContext = context.getServletContext(); ???????????WebApplicationContext ioc = WebApplicationContextUtils.getWebApplicationContext(servletContext); ???????????//用servletPath查询资源数据 ???????????ResMapper resMapper = (ResMapper) ioc.getBean(ResMapper.class); ???????????Res res = resMapper.getResByServletPath(servletPath); ???????????System.out.println("servletPath.......... "+servletPath); ???????????String codeArr= admin.getCodeArr(); ???????????Integer resCode =res.getResCode(); ???????????Integer resPos=res.getResPos(); ???????????//计算验证资源是否可以访问 ???????????boolean authority = DataprocessUtils.checkAuthority(resCode, resPos, codeArr); ???????????if(authority){ ???????????????//显示内容体 ???????????????getJspBody().invoke(null); ???????????????return ; ???????????} ???????} ???????//上面的条件如果有任何一个不满足,那么就不执行标签体,页面上将不显示标签体 ???} ???public void setServletPath(String servletPath) { ???????//为了保持与数据库一致,需要加上“/” ???????this.servletPath = "/"+servletPath; ???}}
 

jsp的自定义标签

原文地址:http://www.cnblogs.com/limingxian537423/p/7511021.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved