1 16 17 package org.springframework.web.servlet.tags; 18 19 import javax.servlet.jsp.JspException ; 20 import javax.servlet.jsp.PageContext ; 21 import javax.servlet.jsp.tagext.TagSupport ; 22 23 import org.springframework.validation.Errors; 24 import org.springframework.web.util.ExpressionEvaluationUtils; 25 26 42 public class NestedPathTag extends TagSupport { 43 44 47 public static final String NESTED_PATH_VARIABLE_NAME = "nestedPath"; 48 49 50 private String path; 51 52 53 private String previousNestedPath = ""; 54 55 56 62 public void setPath(String path) { 63 if (path == null) { 64 path = ""; 65 } 66 if (path.length() > 0 && !path.endsWith(Errors.NESTED_PATH_SEPARATOR)) { 67 path += Errors.NESTED_PATH_SEPARATOR; 68 } 69 this.path = path; 70 } 71 72 75 public String getPath() { 76 return path; 77 } 78 79 80 public int doStartTag() throws JspException { 81 String resolvedPath = ExpressionEvaluationUtils.evaluateString("path", getPath(), pageContext); 82 83 String nestedPath = (String ) pageContext.getAttribute(NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE); 86 if (nestedPath != null) { 87 this.previousNestedPath = nestedPath; 88 nestedPath = nestedPath + resolvedPath; 89 } 90 else { 91 nestedPath = resolvedPath; 92 } 93 pageContext.setAttribute(NESTED_PATH_VARIABLE_NAME, nestedPath, PageContext.REQUEST_SCOPE); 94 95 return EVAL_BODY_INCLUDE; 96 } 97 98 101 public int doEndTag() { 102 if (this.previousNestedPath != null) { 103 pageContext.setAttribute(NESTED_PATH_VARIABLE_NAME, this.previousNestedPath, PageContext.REQUEST_SCOPE); 105 } 106 else { 107 pageContext.removeAttribute(NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE); 109 } 110 111 return EVAL_PAGE; 112 } 113 114 } 115 | Popular Tags |