自定义标签(二)

package model;

import java.util.Collection;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 
 * @author sally
 *<s:for item=${} var="a"
 */
public class ForTag extends TagSupport {

	private Collection<?> item;
	private Object var;
	private java.util.Iterator<?> it;
	
	@Override
	public int doAfterBody() throws JspException {
		if(item!=null&&it.hasNext()){
			Object obj=it.next();
			pageContext.setAttribute(var.toString(), obj);
			return EVAL_BODY_AGAIN;
		}else{
			return SKIP_BODY;
		}
	}

	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		return super.doEndTag();
	}

	@Override
	public int doStartTag() throws JspException {
		if(item==null){
			return SKIP_BODY;
		}else{
			it=item.iterator();
			if(it.hasNext()){
				Object obj=it.next();
				pageContext.setAttribute(var.toString(), obj);
			}
			return EVAL_BODY_INCLUDE;
		}
		
	}

	/**
	 * 
	 * @param item the item to set
	 */
	public void setItem(Collection<?> item) {
		this.item = item;
	}

	/**
	 * 
	 * @param var the var to set
	 */
	public void setVar(Object var) {
		this.var = var;
	}

}
<?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">
    
   <description>JSP custom tag</description>
  <display-name>jsp custom</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>s</short-name>
  <uri>http://www.deruntechonology.com</uri>
  
  	<tag>
  		<description>s:if</description>
  		<name>if</name>
  		<tag-class>model.IFTag</tag-class>
  		<body-content>JSP</body-content>
  		<attribute>
  			<name>test</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  	</tag>
  	<tag>
  		<description>s:loop</description>
  		<name>loop</name>
  		<tag-class>model.LoopTag</tag-class>
  		<body-content>JSP</body-content>
  		<attribute>
  			<name>count</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  	</tag>
  	<tag>
  		<name>for</name>
  		<tag-class>model.ForTag</tag-class>
  		<body-content>JSP</body-content>
  		<attribute>
  			<name>item</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  		<attribute>
  			<name>var</name>
  			<required>true</required>
  			<rtexprvalue>true</rtexprvalue>
  		</attribute>
  	</tag>
  </taglib>
package model;

public class Student {

	private int id;
	private String name;
	
	public Student(int id,String name){
		this.id=id;
		this.name=name;
	}
	public Student(){
		
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}
<%@ page language="java" import="java.util.*,model.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.deruntechonology.com" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>JSP 自定义标签 </title>
	
  </head>
  
  <body>
  <%
  	request.setAttribute("c", 2);
  	
  	List<String> list=new ArrayList();
  	list.add("zhangsan");
  	list.add("lisi");
  	list.add("wangwu");
  	list.add("zhouliu");
  	request.setAttribute("list", list);
  	
  	Student stu1=new Student(1001,"张三");
  	Student stu2=new Student(1002,"李四");
  	List<Student> stuList=new ArrayList();
  	stuList.add(stu1);
  	stuList.add(stu2);
  	request.setAttribute("stuList", stuList);
   %>
    <s:if test="${5>4 }">真的</s:if>
    
    <s:loop count="${c }">
    	hello
    </s:loop>
    <h3>标题</h3>
    
    <s:for var="str" item="${list }">
   		${str }
   </s:for>
   <br/>
   <s:for var="stu" item="${stuList }">
   		${stu.id }--->${stu.name }
   </s:for>
  </body>
</html>


你可能感兴趣的:(自定义标签(二))