zoukankan      html  css  js  c++  java
  • JSTL.带标签体的标签,方法和例子

    1.

    实现 forEach 标签: 两个属性: items(集合类型, Collection), var(String 类型)

    doTag:
    遍历 items 对应的集合
     把正在遍历的对象放入到 pageContext 中, 键: var, 值: 正在遍历的对象.
    把标签体的内容直接输出到页面上.

    (1)首先建立一个customer类:

    package com.lanqiao.javatest;
    
    public class Customer {
        private Integer id;
        private String name;
        private int age;
        public Customer() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Customer(Integer id, String name, int age) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
        
        
    }

    (2)ForEachTag类,继承于父类: SimpleTagSupport

    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.util.Collection;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class ForEachTag extends SimpleTagSupport{
    
        private Collection<?> items;
        
        public void setItems(Collection<?> items) {
            this.items = items;
        }
        
        private String var;
        
        public void setVar(String var) {
            this.var = var;
        }
        
        @Override
        public void doTag() throws JspException, IOException {
    //        * 遍历 items 对应的集合
            if(items != null){
                for(Object obj: items){
            //        * 把正在遍历的对象放入到 pageContext 中, 键: var, 值: 正在遍历的对象. 
                    getJspContext().setAttribute(var, obj);
                    
                    //把标签体的内容直接输出到页面上. 
                    getJspBody().invoke(null); 
                    
                }
            }
            
        }
        
    }

    (3)在lib下建立一个mytag.tld的xml文件,

    <?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">
    
        <description>MyTag 1.2 core library</description>
        <display-name>MyTag core</display-name>
        <tlib-version>1.2</tlib-version>
        <short-name>lxn</short-name>
        <uri>http://lxn.com/myTag/core</uri>
    
        
        
        <tag>
            <name>forEach</name>
            <tag-class>com.lanqiao.javatest.ForEachTag</tag-class>
            <body-content>scriptless</body-content>
            
            <attribute>
                <name>items</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
            
            <attribute>
                <name>var</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    
    </taglib>

    (4)建立一个test.jsp页面:

    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.Map"%>
    <%@page import="com.atguigu.javaweb.Customer"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="lxn" uri="http://lxn.com/myTag/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br><br> <% List<Customer> customers = new ArrayList<Customer>(); customers.add(new Customer(1, "AAA")); customers.add(new Customer(2, "BBB")); customers.add(new Customer(3, "CCC")); customers.add(new Customer(4, "DDD")); customers.add(new Customer(5, "EEE")); request.setAttribute("customers", customers);
    %> <lxn:forEach items="${requestScope.custoemrs }" var="cust"> -- ${cust.id } -- ${cust.name } <br> </lxn:forEach> <br><br> </body> </html>

    2.使用标签处理器类,其中有一些方法:

    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    //标签处理器类
    public class TestJspFragment extends SimpleTagSupport {
        
        @Override
        public void doTag() throws JspException, IOException {

        //JspFragment,是标签体,getJspBody()是获取标签体 JspFragment bodyContent
    = getJspBody();
    //JspFragment.invoke(Witer): Writer 即为标签体内容输出的字符流, 若为 null, 则 //输出到 getJspContext().getOut(), 即输出到页面上. //1. 利用 StringWriter 得到标签体的内容. StringWriter sw = new StringWriter(); bodyContent.invoke(sw); //2. 把标签体的内容都变为大写 String content = sw.toString().toUpperCase(); //3. 获取 JSP 页面的 out 隐含对象, 输出到页面上 getJspContext().getOut().print(content); } }
  • 相关阅读:
    Microsoft.NET Framework 全面开源
    SqlCommandBuilder笔记[原]
    C#几种排序方法的整理[原]
    无聊用js写了一个模拟的购物车[原]
    Visio2005数据库建模视频[原]
    JavaScript读取XML文件[整理]
    IIS中对NetFrameWork进行注册
    时间不等人 创业准备开始了
    用CSS和HTML标签来截取过长的文字部分变成省略号
    C#在SQl中存取图片image[原]
  • 原文地址:https://www.cnblogs.com/lxnlxn/p/5830928.html
Copyright © 2011-2022 走看看