1 16 17 package org.apache.taglibs.standard.tag.common.core; 18 19 import java.util.LinkedList ; 20 import java.util.List ; 21 22 import javax.servlet.jsp.JspException ; 23 import javax.servlet.jsp.JspTagException ; 24 import javax.servlet.jsp.tagext.BodyTagSupport ; 25 import javax.servlet.jsp.tagext.Tag ; 26 27 import org.apache.taglibs.standard.resources.Resources; 28 29 36 37 public abstract class ParamSupport extends BodyTagSupport { 38 39 42 protected String name; protected String value; 45 50 protected boolean encode = true; 51 52 55 public ParamSupport() { 56 super(); 57 init(); 58 } 59 60 private void init() { 61 name = value = null; 62 } 63 64 67 public int doEndTag() throws JspException { 69 Tag t = findAncestorWithClass(this, ParamParent.class); 70 if (t == null) 71 throw new JspTagException ( 72 Resources.getMessage("PARAM_OUTSIDE_PARENT")); 73 74 if (name == null || name.equals("")) 76 return EVAL_PAGE; 77 78 ParamParent parent = (ParamParent) t; 80 String value = this.value; 81 if (value == null) { 82 if (bodyContent == null || bodyContent.getString() == null) 83 value = ""; 84 else 85 value = bodyContent.getString().trim(); 86 } 87 if (encode) { 88 String enc = pageContext.getResponse().getCharacterEncoding(); 91 parent.addParameter( 92 Util.URLEncode(name, enc), Util.URLEncode(value, enc)); 93 } else { 94 parent.addParameter(name, value); 95 } 96 return EVAL_PAGE; 97 } 98 99 public void release() { 101 init(); 102 } 103 104 107 113 public static class ParamManager { 114 115 118 private List names = new LinkedList (); 119 private List values = new LinkedList (); 120 private boolean done = false; 121 122 125 126 public void addParameter(String name, String value) { 127 if (done) 128 throw new IllegalStateException (); 129 if (name != null) { 130 names.add(name); 131 if (value != null) 132 values.add(value); 133 else 134 values.add(""); 135 } 136 } 137 138 142 public String aggregateParams(String url) { 143 147 if (done) 148 throw new IllegalStateException (); 149 done = true; 150 151 155 StringBuffer newParams = new StringBuffer (); 157 for (int i = 0; i < names.size(); i++) { 158 newParams.append(names.get(i) + "=" + values.get(i)); 159 if (i < (names.size() - 1)) 160 newParams.append("&"); 161 } 162 163 if (newParams.length() > 0) { 165 int questionMark = url.indexOf('?'); 166 if (questionMark == -1) { 167 return (url + "?" + newParams); 168 } else { 169 StringBuffer workingUrl = new StringBuffer (url); 170 workingUrl.insert(questionMark + 1, (newParams + "&")); 171 return workingUrl.toString(); 172 } 173 } else { 174 return url; 175 } 176 } 177 } 178 } 179 | Popular Tags |