1 18 package org.apache.struts.taglib.nested.logic; 19 20 import java.util.*; 21 import javax.servlet.http.HttpServletRequest ; 22 import javax.servlet.jsp.JspException ; 23 24 import org.apache.struts.taglib.logic.IterateTag; 25 import org.apache.struts.taglib.nested.NestedNameSupport; 26 import org.apache.struts.taglib.nested.NestedPropertyHelper; 27 28 36 public class NestedIterateTag extends IterateTag implements NestedNameSupport { 37 38 44 public int doStartTag() throws JspException { 45 originalName = getName(); 47 originalProperty = getProperty(); 48 49 if (id == null || id.trim().length() == 0) { id = property; } 51 52 HttpServletRequest request = (HttpServletRequest )pageContext.getRequest(); 54 55 originalNesting = NestedPropertyHelper.getCurrentProperty(request); 57 originalNestingName = NestedPropertyHelper.getCurrentName(request, this); 58 59 if (getName() == null) { 62 nesting = NestedPropertyHelper.getAdjustedProperty(request, getProperty()); 64 } else { 65 nesting = getProperty(); 67 } 68 69 NestedPropertyHelper.setNestedProperties(request, this); 71 72 int temp = super.doStartTag(); 74 75 NestedPropertyHelper.setName(request, getName()); 77 NestedPropertyHelper.setProperty(request, deriveNestedProperty()); 78 79 return temp; 81 } 82 83 87 private String deriveNestedProperty() { 88 Object idObj = pageContext.getAttribute(id); 89 if (idObj instanceof Map.Entry) { 90 return nesting + "("+ ((Map.Entry)idObj).getKey() +")"; 91 } else { 92 return nesting + "["+ this.getIndex() +"]"; 93 } 94 } 95 96 102 public int doAfterBody() throws JspException { 103 int temp = super.doAfterBody(); 105 HttpServletRequest request = (HttpServletRequest )pageContext.getRequest(); 106 if (temp != SKIP_BODY) { 107 NestedPropertyHelper.setProperty(request, deriveNestedProperty()); 109 } 110 return temp; 112 } 113 114 120 public int doEndTag() throws JspException { 121 int i = super.doEndTag(); 123 124 HttpServletRequest request = (HttpServletRequest )pageContext.getRequest(); 126 super.setName(originalName); 128 super.setProperty(originalProperty); 129 130 if (originalNesting == null) { 132 NestedPropertyHelper.deleteReference(request); 133 } else { 134 NestedPropertyHelper.setProperty(request, originalNesting); 135 NestedPropertyHelper.setName(request, originalNestingName); 136 } 137 return i; 139 } 140 141 144 public void release() { 145 super.release(); 147 originalName = null; 149 originalProperty = null; 150 originalNesting = null; 151 originalNestingName = null; 152 } 153 154 155 private String nesting = null; 157 158 private String originalName = null; 160 private String originalProperty = null; 161 162 private String originalNesting = null; 164 private String originalNestingName = null; 165 } 166 | Popular Tags |