• 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

  • 相关阅读:
    二、VueRouter ---kkb
    一、Vue组件化 ---kkb
    React项目的一些配置以及插件
    四、React全家桶(二)
    三、React全家桶(一)
    二、React组件化
    扩展欧几里得算法(含严谨证明)
    bzoj4034 树上操作
    欧几里得算法(含严谨证明)
    noip2013 车站分级
  • 原文地址:https://www.cnblogs.com/liruiloveparents/p/5011687.html
Copyright © 2020-2023  润新知