您的位置:首页 > Web前端 > JavaScript

JSTL自定义标签开发1

2014-03-23 17:02 411 查看
第一步,WEB-INF目录下建立自定义标签的tld文件,如图simple.tld

simple.tld的内容如下:

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">

<display-name>JSTL core</display-name>
<tlib-version>1.0</tlib-version>
<short-name>simple</short-name>
<uri>http://java.sun.com/jsp/jstl/sample</uri>

<tag>
<name>IP</name>
<tag-class>cn.itcast.myTag.IP</tag-class>
<body-content>empty</body-content>

</tag>

<tag>
<name>Foreach</name>
<tag-class>cn.itcast.myTag.ForeachTag</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>

</taglib>


第二步,写各个标签的方法,如ip,Foreach

IP.java

package cn.itcast.myTag;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class IP extends SimpleTagSupport {
private PageContext pageContext;

public void doTag() throws JspException, IOException {
System.out.println("doTag()");
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
String ip = request.getLocalAddr();
JspWriter out = pageContext.getOut();
out.write("<font color='red'>" + ip + "</font>");
}

}
Foreach.java

package cn.itcast.myTag;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class ForeachTag extends SimpleTagSupport {

private String var;
private Object items;
/*
* 将Map类型转成Collection类型
*/
private Collection collection;

public void setVar(String var) {
this.var = var;
}
public void setItems(Object items) {
this.items = items;
if(this.items instanceof Collection){
this.collection = (Collection) items;
}else if(this.items instanceof Map){
Map map = (Map) items;
this.collection = map.entrySet();
}
}
public void doTag() throws JspException, IOException {
//NO1迭代集合
Iterator<Object> it = this.collection.iterator();
while(it.hasNext()){
//NO2将集合中的每一个元素取出来,绑定到PageContext域对象
Object obj = it.next();
PageContext pageContext = (PageContext) this.getJspContext();
pageContext.setAttribute(this.var,obj);
//NO3执行标签体
this.getJspBody().invoke(null);
}
}

}


第三步,页面使用自定义标签

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sample" prefix="simple"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<body>
<%
List<String> stringList = new ArrayList<String>();
stringList.add("汽车");
stringList.add("房子");
stringList.add("新闻");
stringList.add("娱乐");
application.setAttribute("STRINGLIST",stringList);
%>

<simple:Foreach var="s" items="${STRINGLIST}">
${s. }
</simple:Foreach>

<simple:ip />
</body>
</html>


自定义标签的导出与使用

第一步,在src目录下新建文件夹META-INF,然后把刚才的自定义标签tid文件拷贝到该目录下,如图

第二步 选中当前项目day16右击,选中export

第三步,导出后就可以在其他项目中使用了。如图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: