我自己写了一个标签,功能和<foreach>标签一样,就是循环打印一个数组,
比如我有一个数组 
 List list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("adda");
    list.add("aeea");
session.setAttribute("list",list);
然后我把这个数组放到session里面,然后在写了个实现BodyTag接口的类用来实现循环打印的功能
现在我的问题是,我在页面上调用一次<foreach var="str" item="list">可以打印出我想要的结果,
但是我写两遍的话就报错<foreach var="str" item="list">
                      </foreach>
                      <foreach var="str" item="list">
                      </foreach>

解决方案 »

  1.   

    报的什么错?因为list的成员变量是唯一的,多写一次的话它不识别到底是执行哪一个!
      

  2.   

    报的什么错?因为list的成员变量是唯一的,多写一次的话它不识别到底是执行哪一个!
      

  3.   

    package com.xia.testtab;import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.*;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTag;
    import javax.servlet.jsp.tagext.Tag;public class ForEach implements BodyTag { private PageContext pc ;
    private Tag partag;
    private BodyContent bodycontent;
    private String item;
    private String var;
    private List list = null;
    JspWriter out = null;
    public ForEach(){
    System.out.println("调用构造方法");
    }
    public String getItem() {
    return item;
    } public void setItem(String item) {
    System.out.println("设置item对象");
    this.item = item;
    } public String getVar() {
    return var;
    } public void setVar(String var) {
    System.out.print("设置var对象");
    this.var = var;
    } public void doInitBody() throws JspException {
    System.out.println("初始化标签体"); } @Override
    public void setBodyContent(BodyContent body) {
    this.bodycontent = body;
    System.out.println("设置标签上下文"); } @Override
    public int doAfterBody() throws JspException {
    System.out.println("doafterbody方法"+list.size());
    if(list.size()<=0){

    return SKIP_BODY;
    }

     this.pc.getRequest().setAttribute(this.getVar(), list.get(0));
    list.remove(0);

          
    return EVAL_BODY_AGAIN;
    } @Override
    public int doEndTag()  {
    System.out.println("结束标签");
    //pc.getRequest().removeAttribute(this.getVar());

    return 0;
    } @Override
    public int doStartTag() throws JspException {
    System.out.println("开始标签");

            list = (List<String>)pc.getSession().getAttribute(this.getItem());
            
            if(list == null ){
             return SKIP_BODY;
            }
            System.out.println(list.size()+", arg1");
            this.pc.getRequest().setAttribute(this.getVar(), list.get(0));
            list.remove(0);
           
    return EVAL_BODY_INCLUDE;
    } @Override
    public Tag getParent() {
    System.out.println("得到父类标签");
    return null;
    } @Override
    public void release() {
    System.out.println("释放标签"); } @Override
    public void setPageContext(PageContext pc) {
    System.out.println("设置pageContext对象");
    this.pc = pc;
    } @Override
    public void setParent(Tag tag) {
    this.partag = tag; }}
      

  4.   

    <foreach var="str" item="list">  item 要用 el表达式 啊  ${list}