zoukankan      html  css  js  c++  java
  • 实现嵌套的自定义标签

    1.使用简单标记处理器实现一个嵌套的自定义标签,模拟HTML中的<table>标签

    <t:table var="item" items="${users}">
        <t:showUserInfo user="${item}"/>
    </t:table>

    父标签的items属性接受一个List参数,用来存放对象的集合,子标签使用父标签的var属性,依次输出List中集合的对象。

    2.先建立实体类UserInfo

    public class UserInfo {
        private String userName;
        private int age;
        private String email;
    
        public UserInfo(String userName,int age, String email) {
            this.age = age;
            this.email = email;
            this.userName = userName;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    3.建立外层标签处理类TableTag

    public class TableTag extends SimpleTagSupport{
        private List items;
        private String var;
        public void doTag() throws JspException,IOException{
            JspWriter out = getJspContext().getOut();
            out.println("<table>");
            for(Object item: items){
                out.println("<tr>");
                getJspContext().setAttribute(var,item);
                getJspBody().invoke(null);
                out.println("</tr>");
            }
            out.println("</table>");
        }
    
        public String getVar() {
            return var;
        }
    
        public void setVar(String var) {
            this.var = var;
        }
    
        public void setItems(List items) {
            this.items = items;
        }
        public List getItems(){
            return this.items;
        }
    }

    外层标签有两个属性:var和items,需要设置他们对应的bean方法,在doTag()的for循环中,每次循环都设置var值为items中的下一项,然后通过调用体调用子标签。

    4.建立内层标签处理类UserInfoTag

    public class UserInfoTag extends SimpleTagSupport{
        private UserInfo user;
        public void doTag()throws JspException,IOException{
            String content = "<td>"+user.getUserName()+"</td>";
            content +="<td>"+user.getAge()+"</td>";
            content +="<td>"+user.getEmail()+"</td>";
            getJspContext().getOut().println(content);
        }
    
        public void setUser(UserInfo user) {
            this.user = user;
        }
    
        public UserInfo getUser(){
            return this.user;
        }
    }

    5.在TLD中配置嵌套标签

        <tlib-version>1.0</tlib-version>
        <short-name>myshortname</short-name>
        <uri>http://tabletags.juaner.com</uri>
        <tag>
            <name>table</name>
            <tag-class>com.juaner.web.ch12.TableTag</tag-class>
            <body-content>scriptless</body-content>
            <attribute>
                <name>var</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
            <attribute>
                <name>items</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
        <tag>
            <name>showUserInfo</name>
            <tag-class>com.juaner.web.ch12.UserInfoTag</tag-class>
            <body-content>empty</body-content>
            <attribute>
                <name>user</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>

    6.测试标签嵌套的运行效果

    <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.List" %>
    <%@ page import="com.juaner.web.ch12.UserInfo" %>
    <%@ page import="java.util.ArrayList" %>
    <%@taglib prefix="t" uri="http://tabletags.juaner.com" %>
    <html>
    <body>
    <%
        List<UserInfo> users = new ArrayList<UserInfo>();
        users.add(new UserInfo("张三",20,"zhangsan@163.com"));
        users.add(new UserInfo("李四",20,"lisi@163.com"));
        users.add(new UserInfo("王五",20,"wangwu@163.com"));
        pageContext.setAttribute("users",users);
    %>
    <t:table var="item" items="${users}">
        <t:showUserInfo user="${item}"/>
    </t:table>
    </body>
    </html>

    运行结果:

    查看页面源码:

  • 相关阅读:
    Android笔记:数据储存
    Android笔记:管理所有活动
    Android随笔:属性
    Android笔记:限定符
    Android笔记:ninepatch
    Android笔记:获取屏幕信息
    js自动完成
    动态生成实体类
    EF框架学习手记
    js遮罩效果
  • 原文地址:https://www.cnblogs.com/juaner767/p/5513233.html
Copyright © 2011-2022 走看看