定制标签-动态数据的标记:迭代执行体

自定义一个简单的标记开发。需要一个标记处理器,一个tld文件,一个jsp文件。

simpletag.jsp

<%@ taglib prefix="my" uri="simple" %>
<html>
<body>
<em><p>Movie List</p></em><br>
<my:do>
Name:${movie}      author:${author}<br>
</my:do>
</body>
</html>

simpleTag.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.2</tlib-version>
<uri>simple</uri>

<tag>
    <description>Simple Tag</description>
    <name>do</name>
    <tag-class>foo.SimpleTagTest</tag-class>
    <body-content>scriptless</body-content>
</tag>
</taglib>

SimpleTagTest.java

package foo;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;

public class SimpleTagTest extends SimpleTagSupport {
    //String[] movie = {"Big War","Love","A Happy Day"};
    Map<String,String> movieList = new HashMap<String,String>();
    public void doTag() throws JspException,IOException {
        movieList.put("Big War","jack");
        movieList.put("Love","jenny");
        movieList.put("A Happy Day","hany");
        for(Map.Entry movie : movieList.entrySet()){
            getJspContext().setAttribute("movie",movie.getKey());
            getJspContext().setAttribute("author",movie.getValue());
            getJspBody().invoke(null);
        }
    }
}

标记处理器是个java代码文件,继承SimpleTagSuport类,并重写doTag方法。invoke方法的参数null的意思是指输出到响应。

上面的标记体并没有标记体属性,下面的例子展示具有属性的简单标记。

simpletag2.jsp

<%@ taglib prefix="mytag2" uri="simple2" %>
<html>
<body>
<% pageContext.setAttribute("MOVIE","Happy Day"); %>
<mytag2:do movieName="${MOVIE}" >
name:${MovieName}
</mytag2:do>
</body>
</html>

SimpleTagTest2.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.2</tlib-version>
<uri>simple2</uri>

<tag>
    <description>Simple2 Tag</description>
    <name>do</name>
    <tag-class>foo.SimpleTagTest2</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
        <name>movieName</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
</tag>
</taglib>

SimpleTagTest2.java

package foo;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;

public class SimpleTagTest2 extends SimpleTagSupport {
    private String movieName;
    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }
    public void doTag() throws JspException,IOException {
        getJspContext().setAttribute("MovieName",movieName);
        getJspBody().invoke(null);    
    }
}

以上代码很简单就不在赘言了。

转载于:https://www.cnblogs.com/justenjoy/p/6771322.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值