[转]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,一经查实,立即删除!

相关文章

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…

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中相邻的指令在存储器中也相邻。而异常控制流则是指程序变量表示的内部程序状态中的变化、系统状态的变化等突发情况使得控制系统做…

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…

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

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

【ArcGIS Engine二次开发】地图操作(1):加载Mxd地图文档

在ArcGIS中,以mxd作为扩展名的文件叫地图文档。地图文档中只是包含图层的引用,即存储当前地图的图层路径、符号、状态、修饰等信息,并不存储真实的数据层。 ArcGIS Engine中有常见两种加载地图文档的方法:LoadMxFile方法和IMapDocument方法,案例效果如下图所示: 打开VS20…

JAVA的extends用法

理解继承是理解面向对象程序设计的关键。在Java中&#xff0c;通过关键字extends继承一个已有的类&#xff0c;被继承的类称为父类(超类&#xff0c;基类)&#xff0c;新的类称为子类(派生类)。在Java中不允许多继承。&#xff08;1&#xff09;继承 [java] view plaincopy cla…

CSS伪元素 after 实现鼠标悬浮信息及动画效果

<p class"titleinfo_title title_hover" data-content" 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇"> 04 喜看稻菽千重浪--记首届国家最高科技奖获得者袁隆平 等三篇 </p> 强制多行显示效果&#xff1a; <style type&…

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字 47/100 发布文章 u011068702 未选择任何文件 new ✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模…

使用ML.NET+ONNX预训练模型整活B站经典《华强买瓜》

前言最近在看微软开源的机器学习框架ML.NET使用别人的预训练模型(开放神经网络交换格式.onnx)来识别图像&#xff0c;然后逛github发现一个好玩的repo。决定整活一期博客。首先还是稍微科普一下机器学习相关的知识&#xff0c;这一块.NET虽然很早就开源了ML.NET框架&#xff0c…