Jsp2.0自定义标签(第三天)——EL表达式的使用

1、提出问题:

我们经常会看到这样的jsp页面代码:

image

浏览器显示:

image

为什么会在页面输出: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>

浏览器显示:

image就这么简单

注意:这里直接把"per"(姑且成为key)在作用域中对应的值“Hello World”(姑且叫value)赋给了属性print,所有在后台直接打印print属性就行了。

但是这与前面第二天的例子不一样,前面是把“arr”字符串赋给了属性items,所以要取出”arr”对应的值还要通过

调用jspContext.getAttribute(items);方法,这里要注意一下。

image

扩充:如果前台页面变成这样呢?看代码

<%@ 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

原文地址:https://www.cnblogs.com/liruiloveparents/p/5011687.html