Jsp2.0自定义标签(第三天)——EL表达式的使用
2024-10-20 03:32:31
1、提出问题:
我们经常会看到这样的jsp页面代码:
浏览器显示:
为什么会在页面输出:Hello World ,${per}究竟是如何找到“Hello World”的呢?
2、分析问题:
要想解决上述疑问,首先要试试自己能不能自定义出上面的标签。
比如我想定义<myout:demo print="${per}"/>拥有打印出EL表达式值的功能。
同前面几章一样,自定义标签我分为几个部分:
第一部分:定义标签的地方(*.tld)。
<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myout</short-name>
<!-- 这就是比上面的demo.tld文件多添加了一行 -->
<uri>/demo</uri>
<tag>
<name>demo</name>
<tag-class>com.tag.support.ElTagDemo</tag-class>
<body-content>empty</body-content>
<attribute>
<name>print</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
第二部分:tld文件中的实现类
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class ElTagDemo extends SimpleTagSupport{ private String print; public String getPrint() {
return print;
} public void setPrint(String print) {
this.print = print;
} @Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().write(print.toString());
} }
第三部分:前台页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="myTag" uri="/demo" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("per","Hello World");
%>
<myTag:demo print="${per}"/>
</body>
</html>
浏览器显示:
就这么简单
注意:这里直接把"per"(姑且成为key)在作用域中对应的值“Hello World”(姑且叫value)赋给了属性print,所有在后台直接打印print属性就行了。
但是这与前面第二天的例子不一样,前面是把“arr”字符串赋给了属性items,所以要取出”arr”对应的值还要通过
调用jspContext.getAttribute(items);方法,这里要注意一下。
扩充:如果前台页面变成这样呢?看代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="myTag" uri="/demo" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
UserInfo user = new UserInfo();
user.setName("jack");
user.setAge(11);
request.setAttribute("per",user);
%>
<myTag:demo print="${per}"/>
</body>
</html>
这样在后头自定义标签处理类中就要把print的类型定义为UserInfo
最新文章
- 用Python组合Celery Redis RabbitMQ进行分布式数据抓取
- Mahout之Canopy Clustering深入理解
- 元数据标签Embed
- 数列极限---和Gauss(取整)函数有关
- C#和asp.net中链接数据库中 参数的几种传递方法
- SpringMVC06以对象的方式获取前台的数据
- (转)ie -ms-interpolation-mode: bicubic 属性详解
- Spring 3 调度器示例 —— JDK 定时器和 Quartz 展示
- js-权威指南学习笔记8
- python识别验证码——PIL,pytesser,pytesseract的安装
- SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
- MySQL 5.7开启二进制日志注意事项
- lucene的CRUD操作Document(四)
- Directory 类
- XMLHttpRequest.withCredentials
- ddmlib问题总结——同步获取设备信息
- 使用ASP.NET读取word2003文档
- springboot 中使用Druid 数据源提供数据库监控
- 【2018年12月10日】A股最便宜的股票
- JVM jstat 详解