View Javadoc

1   package net.stff.util.tags;
2   
3   import java.io.IOException;
4   
5   import javax.servlet.jsp.JspException;
6   import javax.servlet.jsp.PageContext;
7   import javax.servlet.jsp.tagext.BodyTagSupport;
8   import javax.servlet.jsp.tagext.IterationTag;
9   import javax.servlet.jsp.tagext.Tag;
10  
11  import org.springframework.web.util.ExpressionEvaluationUtils;
12  
13  /***
14   * @author buntekuh
15   *
16   * <br>Implements an EL aware "for" loop.
17   * <br>Loops over an integer range from "from" to "to" incrementing by "step". The current value is stored in a pageContext variable defined by "var".
18   */
19  public class LoopTag extends BodyTagSupport {
20  
21      private int from;
22      private int to;
23      private int step= 1;
24      private String var;
25      
26      /***
27       * 
28       * @return Returns the var.
29       */
30      public String getVar() {
31          return var;
32      }
33      /***
34       * @param var The var to set.
35       */
36      public void setVar(String var) {
37          this.var = var;
38      }
39      /***
40       * @param from The from to set.
41       */
42      public void setFrom(String from) {
43          try {
44  	        this.from= ExpressionEvaluationUtils.evaluateInteger("from", from, super.pageContext);
45  	    } catch (JspException e) {
46  	        e.printStackTrace();
47  	        this.from= 0;
48  	    } 
49      }
50      /***
51       * @param step The step to set.
52       */
53      public void setStep(String step) {
54          
55          
56          try {
57              this.step= ExpressionEvaluationUtils.evaluateInteger("step", step, super.pageContext);
58          } catch (JspException e) {
59              e.printStackTrace();
60              this.step= 1;
61          } 
62      }
63      /***
64       * @param to The to to set.
65       */
66      public void setTo(String to) {
67          try {
68  	        this.to= ExpressionEvaluationUtils.evaluateInteger("to", to, super.pageContext);
69  	    } catch (JspException e) {
70  	        e.printStackTrace();
71  	        this.to= -1;
72  	    } 
73      }
74      
75  	public int doStartTag() throws JspException{
76  	    
77  	    return from <= to ? IterationTag.EVAL_BODY_AGAIN : Tag.SKIP_BODY;
78  	}
79  	
80  	public void doInitBody() throws JspException{
81  	    super.pageContext.setAttribute(getVar(), new Integer(from), PageContext.PAGE_SCOPE);
82  	}
83  	
84  	public int doAfterBody() throws JspException{
85          int i = ((Integer)super.pageContext.getAttribute(getVar(), PageContext.PAGE_SCOPE)).intValue();
86          i += step;
87          if(i <= to){
88              super.pageContext.setAttribute(getVar(), new Integer(i), PageContext.PAGE_SCOPE);
89              return IterationTag.EVAL_BODY_AGAIN;
90          } 
91          else{
92              try {
93                  super.bodyContent.writeOut(super.bodyContent.getEnclosingWriter());
94              } catch (IOException e) {
95                  throw new JspException(e.getMessage());
96              }
97              return Tag.SKIP_BODY;
98          }
99      }	
100 }