1 18 package org.apache.beehive.netui.tags.html; 19 20 import org.apache.beehive.netui.util.internal.InternalStringBuilder; 21 22 import org.apache.beehive.netui.tags.ByRef; 23 import org.apache.beehive.netui.tags.HtmlUtils; 24 import org.apache.beehive.netui.tags.IHtmlAccessable; 25 import org.apache.beehive.netui.tags.rendering.*; 26 import org.apache.beehive.netui.util.Bundle; 27 28 import javax.servlet.ServletRequest ; 29 import javax.servlet.jsp.JspException ; 30 import java.util.ArrayList ; 31 32 42 public class TextBox extends HtmlDefaultableDataSourceTag 43 implements IFormattable, IHtmlAccessable 44 { 45 private InputTextTag.State _state = new InputTextTag.State(); 46 47 private ArrayList _formatters; 48 private boolean _password = false; 49 private boolean _formatErrors = false; 50 51 54 public String getTagName() 55 { 56 return "TextBox"; 57 } 58 59 64 protected AbstractHtmlState getState() 65 { 66 return _state; 67 } 68 69 77 public void setAttribute(String name, String value, String facet) 78 throws JspException  79 { 80 if (name != null) { 81 if (name.equals(TYPE) || name.equals(VALUE)) { 82 String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object []{name}); 83 registerTagError(s, null); 84 } 85 else { 86 if (name.equals(DISABLED)) { 87 _state.disabled = new Boolean (value).booleanValue(); 88 return; 89 } 90 else if (name.equals(READONLY)) { 91 _state.readonly = new Boolean (value).booleanValue(); 92 return; 93 } 94 else if (name.equals(MAXLENGTH)) { 95 _state.maxlength = Integer.parseInt(value); 96 return; 97 } 98 else if (name.equals(SIZE)) { 99 _state.size = Integer.parseInt(value); 100 return; 101 } 102 } 103 } 104 105 super.setAttribute(name, value, facet); 106 } 107 108 110 119 public void setMaxlength(int maxlength) 120 { 121 _state.maxlength = maxlength; 122 } 123 124 133 public void setPassword(boolean password) 134 { 135 _password = password; 136 } 137 138 142 protected boolean getPassword() 143 { 144 return _password; 145 } 146 147 156 public void setReadonly(boolean readonly) 157 { 158 _state.readonly = readonly; 159 } 160 161 170 public void setSize(int size) 171 { 172 _state.size = size; 173 } 174 175 193 public void setAccessKey(char accessKey) 194 { 195 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey)); 196 } 197 198 207 public void setAlt(String alt) 208 { 209 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt); 210 } 211 212 223 public void setTabindex(int tabindex) 224 { 225 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex)); 226 } 227 228 230 234 public int doStartTag() throws JspException  235 { 236 return EVAL_BODY_BUFFERED; 237 } 238 239 243 public int doEndTag() throws JspException  244 { 245 ServletRequest req = pageContext.getRequest(); 246 247 if (_password) { 249 _state.type = INPUT_PASSWORD; 250 } 251 else { 252 _state.type = INPUT_TEXT; 253 } 254 255 256 ByRef ref = new ByRef(); 258 nameHtmlControl(_state, ref); 259 260 _state.disabled = isDisabled(); 261 262 Object textObject = evaluateDataSource(); 264 if ((textObject == null) || (textObject.toString().length() == 0)) { 265 textObject = _defaultValue; 266 } 267 268 String text = null; 270 if (textObject != null) { 271 text = formatText(textObject); 272 InternalStringBuilder sb = new InternalStringBuilder(text.length() + 16); 273 StringBuilderRenderAppender sbAppend = new StringBuilderRenderAppender(sb); 274 HtmlUtils.filter(text, sbAppend); 275 text = sb.toString(); 276 } 277 _state.value = text; 278 279 if (_formatErrors) { 281 if (bodyContent != null) { 282 String value = bodyContent.getString().trim(); 283 bodyContent.clearBody(); 284 write(value); 285 } 286 } 287 288 if (hasErrors()) 289 return reportAndExit(EVAL_PAGE); 290 291 WriteRenderAppender writer = new WriteRenderAppender(pageContext); 293 TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_TEXT_TAG, req); 294 assert(br != null); 295 296 br.doStartTag(writer, _state); 297 br.doEndTag(writer); 298 299 if (!ref.isNull()) 301 write((String ) ref.getRef()); 302 303 localRelease(); 304 return EVAL_PAGE; 305 } 306 307 310 protected void localRelease() 311 { 312 super.localRelease(); 313 314 _state.clear(); 315 316 _formatters = null; 317 _password = false; 318 _formatErrors = false; 319 } 320 321 325 public void addFormatter(FormatTag.Formatter formatter) 326 { 327 if (_formatters == null) 328 _formatters = new ArrayList (); 329 330 _formatters.add(formatter); 331 } 332 333 337 public void formatterHasError() 338 { 339 _formatErrors = true; 340 } 341 342 344 private String formatText(Object text) 345 throws JspException  346 { 347 assert(text != null) : "parameter 'text' must not be null"; 348 349 if (_formatters == null) 350 return text.toString(); 351 352 for (int i = 0; i < _formatters.size(); i++) { 353 FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i); 354 try { 355 text = currentFormatter.format(text); 356 } 357 catch (JspException e) { 358 registerTagError(e.getMessage(), null); 359 } 360 } 361 return text.toString(); 362 } 363 } 364 | Popular Tags |