[转]EL函数、自定义EL函数、自定义标签

EL函数

1、EL函数的作用:操作字符串

2、在JSP页面中要引入EL函数库

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

3、语法

${ fn:方法名(参数) }

4、实例

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!-- 引入EL函数库 -->
  4. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  5. <!-- 引入jstl标签库 -->
  6. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <html>
  9. <head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  11. <title>Insert title here</title>
  12. </head>
  13. <body>
  14. <!-- 操作域对象中的字符串 -->
  15. <c:set var="username" value="abcdefg" scope="page"></c:set>
  16. <h4>EL函数操作page域的内容</h4>
  17. ${ fn:indexOf(pageScope.username,"de") }
  18. ${ fn:startsWith(pageScope.username,"a") }
  19. ${ fn:toUpperCase(username) }
  20. ${ fn:substringAfter(username,"de") }
  21. ${ fn:substringBefore(username,"de") }
  22. </body>
  23. </html>

自定义EL函数

步骤:

(1)编写一个java类,提供一个静态方法,方法必须有返回值

 
  1. package com.myel;
  2. /**
  3. * 自定义EL函数
  4. * @author 58351
  5. *
  6. */
  7. public class ELDemo {
  8. /**
  9. * say hello 方法
  10. * @param str
  11. * @return
  12. */
  13. public static String sayHello(String str){
  14. return "hello"+str;
  15. }
  16. }

(2)在WEB-INF目录下,编写.tld结尾的文件(xml文件),进行配置

- 不要在lib或者classes目录下创建

 
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  4. version="2.0">
  5. <tlib-version>1.0</tlib-version>
  6. <short-name>myfn</short-name>
  7. <uri>http://www.sutu.com/myfn</uri>
  8. <!-- 配置自定义EL函数 -->
  9. <function>
  10. <!-- 配置方法的名称 -->
  11. <name>sayHello</name>
  12. <!-- 配置方法所在的类 -->
  13. <function-class>com.myel.ELDemo</function-class>
  14. <!-- 配置方法的签名(描述类中的方法) -->
  15. <function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
  16. </function>
  17. </taglib>

(3)在JSP页面上引入自己编写的EL函数库

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!-- 引入自己的EL函数 -->
  5. <%@ taglib prefix="myfn" uri="http://www.sutu.com/myfn" %>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  10. <title>Insert title here</title>
  11. </head>
  12. <body>
  13. <h4>使用自己编写的EL函数</h4>
  14. ${ myfn:sayHello("张三") }
  15. </body>
  16. </html>

自定义标签

1、自定义标签主要用于移除JSP页面中的java代码,提高代码的复用性

2、开发步骤:

(1)编写一个类,继承SimpleTagSupport类,重写3个方法

(2)在tld文件中,编写配置文件

(3)在 JSP页面中引入自定义的标签库

自定义标签(没有标签主体)

自定义标签的java类

 
  1. package com.myjstl;
  2. import java.io.IOException;
  3. import javax.servlet.jsp.JspContext;
  4. import javax.servlet.jsp.JspException;
  5. import javax.servlet.jsp.PageContext;
  6. import javax.servlet.jsp.tagext.JspFragment;
  7. import javax.servlet.jsp.tagext.SimpleTagSupport;
  8. /**
  9. * 自定义标签没有标签主体
  10. * @author 58351
  11. *
  12. */
  13. public class JSTLDemo1 extends SimpleTagSupport {
  14. private PageContext pc;
  15. private JspFragment body;
  16. /**
  17. * 标签执行了就会调用该方法
  18. */
  19. public void doTag() throws JspException, IOException {
  20. //向页面输出hello
  21. pc.getOut().write("hello");
  22. }
  23. /**
  24. * 获取标签主体,默认调用该方法,把JspFragment(标签主体对象)传入进来
  25. */
  26. public void setJspBody(JspFragment jspBody) {
  27. this.body = jspBody;
  28. }
  29. /**
  30. * Tomcat服务器默认先调用该方法,获取pageContext对象
  31. */
  32. public void setJspContext(JspContext pc) {
  33. this.pc = (PageContext) pc;
  34. }
  35. }

配置文件

 
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  4. version="2.0">
  5. <tlib-version>1.0</tlib-version>
  6. <short-name>myc</short-name>
  7. <uri>http://www.sutu.com/myc</uri>
  8. <!-- 配置自定义标签 -->
  9. <tag>
  10. <!-- 配置标签名称 -->
  11. <name>print</name>
  12. <!-- 自定义标签所在的类 -->
  13. <tag-class>com.myjstl.JSTLDemo1</tag-class>
  14. <!-- 配置标签主体 -->
  15. <body-content>empty</body-content>
  16. </tag>
  17. </taglib>

JSP页面引入自定义标签库

<%@ taglib prefix="myc" uri="http://www.sutu.com/myc" %>

使用标签

 
  1. <body>
  2. <!-- 自定义标签 -->
  3. <!-- 在页面上输出hello -->
  4. <myc:print/>
  5. </body>

自定义标签(有标签主体)

 
  1. package com.myjstl;
  2. import java.io.IOException;
  3. import javax.servlet.jsp.JspContext;
  4. import javax.servlet.jsp.JspException;
  5. import javax.servlet.jsp.PageContext;
  6. import javax.servlet.jsp.tagext.JspFragment;
  7. import javax.servlet.jsp.tagext.SimpleTagSupport;
  8. /**
  9. * 自定义标签有标签主体
  10. * @author 58351
  11. *
  12. */
  13. public class JSTLDemo2 extends SimpleTagSupport {
  14. private PageContext pc;
  15. private JspFragment body;
  16. /**
  17. * 最后调用该方法,目的:输出标签主体
  18. */
  19. public void doTag() throws JspException, IOException {
  20. //直接调用JspFragment的invoke(Writer out),标签主体向外输出
  21. body.invoke(pc.getOut());
  22. }
  23. public void setJspBody(JspFragment jspBody) {
  24. this.body = jspBody;
  25. }
  26. public void setJspContext(JspContext pc) {
  27. this.pc = (PageContext) pc;
  28. }
  29. }

配置文件

 
  1. <!-- 配置自定义标签含有标签主体 -->
  2. <tag>
  3. <name>out</name>
  4. <tag-class>com.myjstl.JSTLDemo2</tag-class>
  5. <body-content>scriptless</body-content>
  6. </tag>

带有属性的自定义标签

配置类

 
  1. public class JstlDemo3 extends SimpleTagSupport{
  2. private PageContext pc;
  3. // 代表标签主体
  4. private JspFragment jspBody;
  5. // test和JSP页面上的if test属性名称必须是相同的
  6. // 必须给我提供test属性的set方法
  7. private boolean test;
  8. public void setTest(boolean test) {
  9. this.test = test;
  10. }
  11. /**
  12. * 最后调用该方法,目的:输出标签主体,由于属性决定
  13. */
  14. public void doTag() throws JspException, IOException {
  15. // 直接调用JspFragment的invoke(Writer out) ,标签主体向外输出
  16. if(test){
  17. jspBody.invoke(pc.getOut());
  18. }
  19. }
  20. public void setJspContext(JspContext pc) {
  21. this.pc = (PageContext) pc;
  22. }
  23. public void setJspBody(JspFragment jspBody) {
  24. this.jspBody = jspBody;
  25. }
  26. }

配置文件

 
  1. <tag>
  2. <!-- 配置标签名称 -->
  3. <name>if</name>
  4. <!-- 标签使用的类 -->
  5. <tag-class>cn.itcast.jstl.JstlDemo3</tag-class>
  6. <!-- 配置标签主体 -->
  7. <body-content>scriptless</body-content>
  8. <!-- 配置属性 -->
  9. <attribute>
  10. <!-- 配置数据名称 -->
  11. <name>test</name>
  12. <!-- 属性是否是必须出现的 -->
  13. <required>true</required>
  14. <!-- 支持EL表达式 -->
  15. <rtexprvalue>true</rtexprvalue>
  16. <!-- 属性的类型 -->
  17. <type>boolean</type>
  18. </attribute>
  19. </tag>

 


---------------------
作者:Tommy5553
来源:CSDN
原文:https://blog.csdn.net/Tommy5553/article/details/86362449
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XidianOJ 1019 自然数的秘密

题目描述 题意&#xff1a; 已知&#xff1a;N&#xff01;N*(N-1)*...*2*1 找到最小自然数 N, 使N!末尾有连续 M个零. 例如, 5! 的结尾包含1个零. 输入 第一行输入一个整数T,表示有T组测试数据。 对于每组测试数据&#xff0c;输入一个整数M&#xff0c;表示包含M个零。&#…

C语言试题119之利用递归方法求 5的阶层

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:利用递归方法求 5的阶层 分析:递归公式:fn=fn_1*4的阶层 2 、温馨提示 想获取更多C…

深入学习http协议(转)

http://www.blogjava.net/zjusuyong/articles/304788.html转载来的&#xff0c;没看到原文地址。http协议学习系列1. 基础概念篇1.1 介绍HTTP是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。它的发展是万维网协会&#xff08;World Wide Web Co…

【ArcGIS风暴】ArcGIS+CASS点云(.las)数据生成等高线方法案例精解

本文讲解基于点云LAS数据,在ArcGIS+CASS平台上生成等高线的方法。 扩展阅读: 什么是点云?什么是Las数据集?一篇文章告诉你点云数据的奥秘 ArcGIS+CASS点云(.las)数据生成等高线方法案例精解 ArcGIS平台上点云(.las)数据生成等高线方法案例精解 文章目录 一、LAS转多点二、…

CSS浮动属性Float到底什么怎么回事,下面详细解释一下

float 是 css 的定位属性。在传统的印刷布局中&#xff0c;文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”。在网页设计中&#xff0c;应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样。浮动的元素仍然是网页流的一部分。这与使用绝对 定…

MAUI Developer Day in GCR

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍作为一个支持在单一代码库中开发能够运行在 Android、iOS、macOS 和 Windows 等多平台的应用程序的跨平台框架&#xff0c;.NET MAUI &#xff08;多平台应用程序用户界面&#xff09;还在预览版时就…

C语言试题126之请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二…

【ArcGIS风暴】ArcGIS点云抽稀(稀疏化LAS点)详解案例教程

考虑对过采样 LAS 数据(例如通过摄影测量方式获得的点云以及多个叠加激光雷达扫描的返回值)使用稀疏化LAS点工具,以优化显示性能和加速分析操作。 文章目录 1. 创建las数据集2. 稀疏化LAS点适用版本:ArcGIS10.6以上。 1. 创建las数据集 扩展阅读:ArcGIS10.6创建LAS数据集…

20145313张雪纯《信息安全系统设计基础》第11周学习总结

20145313张雪纯《信息安全系统设计基础》第11周学习总结 教材 异常控制流&#xff08;ECF&#xff09; 最简单的“平滑序列”类型的控制流是指PC中相邻的指令在存储器中也相邻。而异常控制流则是指程序变量表示的内部程序状态中的变化、系统状态的变化等突发情况使得控制系统做…

Ueditor 改造, 为每个用户单独创建上传附件目录,用户只能查看自己上传的附件文件

1、修改 ueditor\net\config.json 文件 约 第78行&#xff1a; /* 上传文件配置 */"filePathFormat": "upload/{username}/file/{yyyy}{mm}{dd}/{time}{rand:6}", 约 第134行&#xff1a; /* 列出指定目录下的文件 */"fileManagerListPath": …

Silverlight 5 beta新特性探索系列:9.视频快进快退和TextSearch对象对文字项查询

本节讲诉两个新特性&#xff1a;一、在Silverlight 5中可以控制MediaElement对象播放的视频进行快进快退控制。二、在Silverlight 5中的文字项进行搜索查询。 一、对于MediaElement媒体播放对象的视频进行快退快进控制 它是通过MediaElement.PlaybackRate属性进行控制的。当前此…

【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题

ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题&#xff0c;具体如下。 发现在引用列表中找不到ESRI.ArcGIS.AxControls服务。 一直显示感叹号。 多次尝试添加无果&#xff0c;解决方法&#xff1a;选中引用列表中的ESRI.ArcGIS.AxControls&#xff0c;在属性表窗口中将…

C语言试题122之利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。 2 、温馨提示 想…

Java IO流读取/写入/修改某个字符串(通用)

2019独角兽企业重金招聘Python工程师标准>>> package com.test;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import jav…

重新开始征程

自本科毕业&#xff0c;离开那座城市&#xff0c;来到帝都&#xff0c;开始新的生活&#xff0c;也就没有再开垦这片热土。重启征程是因为研究生快要毕业啦&#xff01; 改了昵称和博客的名称&#xff0c;在百度搜索的时候发现&#xff0c;本科毕设拿了省优秀毕业设计三等奖了&…

.Net Core-做一个微信公众号的排队系统

Part1前言微信扫码登录&#xff0c;微信扫码获取排队信息这些场景很常见&#xff0c;但是大家知道里面的原理是怎么实现的呢&#xff1f;今天我就来给大家解惑&#xff01;Part2总体流程1浏览器请求服务器获取到二维码图片浏览器生成唯一值uuid通过uuid获取到带参数的二维码&am…

Python 实现 csv文件转换成json文件

# -*- coding:utf-8 -*- # csv转换成json import csv import jsonfile_path "district.csv" # 指定encodeingutf-8中文防止乱码 csvfile open(file_path,r, encodingutf-8) jsonfile open(district.json, w,encodingutf-8)# 指定列名 fieldnames ("code&q…

【292天】跃迁之路——程序员高效学习方法论探索系列(实验阶段50-2017.11.24)...

实验说明 从2017.10.6起&#xff0c;开启这个系列&#xff0c;目标只有一个&#xff1a;探索新的学习方法&#xff0c;实现跃迁式成长实验期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我将以自己为实验对象。我将开源我的学习方法&#xff0c;方法不断更新迭代&#…

C语言试题123之有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个

1、题目 题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后 问第一个人,他说是 10 岁。请问第五个人多大? 分析:利用递归的方法,递…