1 18 package org.apache.beehive.netui.tags.html; 19 20 import org.apache.beehive.netui.pageflow.ProcessPopulate; 21 import org.apache.beehive.netui.pageflow.RequestParameterHandler; 22 import org.apache.beehive.netui.tags.ByRef; 23 import org.apache.beehive.netui.tags.IHtmlAccessable; 24 import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor; 25 import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor; 26 import org.apache.beehive.netui.tags.naming.PrefixNameInterceptor; 27 import org.apache.beehive.netui.tags.rendering.*; 28 import org.apache.beehive.netui.util.Bundle; 29 import org.apache.beehive.netui.util.logging.Logger; 30 31 import javax.servlet.ServletRequest ; 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.jsp.JspException ; 34 import javax.servlet.jsp.tagext.Tag ; 35 import java.util.ArrayList ; 36 import java.util.Collections ; 37 import java.util.List ; 38 39 80 public class CheckBox 81 extends HtmlDefaultableDataSourceTag 82 implements IHtmlAccessable 83 { 84 private static final Logger logger = Logger.getInstance(CheckBox.class); 85 86 private InputBooleanTag.State _state = new InputBooleanTag.State(); 87 private InputHiddenTag.State _hiddenState = new InputHiddenTag.State(); 88 89 private static final String CHECKBOX_KEY = "checkbox_key"; 90 private static final String OLDVALUE_SUFFIX = "OldValue"; 91 92 private static final List _internalNamingChain; 93 94 static 95 { 96 List l = new ArrayList (3); 97 l.add(new FormDataNameInterceptor()); 98 l.add(new IndexedNameInterceptor()); 99 l.add(new PrefixNameInterceptor(CHECKBOX_KEY)); 100 _internalNamingChain = Collections.unmodifiableList(l); 101 } 102 103 static 104 { 105 org.apache.beehive.netui.pageflow.ProcessPopulate.registerPrefixHandler(CHECKBOX_KEY, new CheckBoxPrefixHandler()); 106 } 107 108 111 public static class CheckBoxPrefixHandler 112 implements RequestParameterHandler 113 { 114 117 public void process(HttpServletRequest request, String key, String expr, 118 ProcessPopulate.ExpressionUpdateNode node) 119 { 120 String returnVal = null; 121 if (!key.endsWith(OLDVALUE_SUFFIX)) { 122 returnVal = "true"; 124 } 125 else { 126 String newKey = key.substring(0, key.indexOf(OLDVALUE_SUFFIX)); 128 String checkBox = request.getParameter(newKey); 129 if (checkBox != null) { 130 returnVal = "true"; 131 } 132 else { 133 returnVal = "false"; 134 } 135 } 136 137 if (node.expression.endsWith(OLDVALUE_SUFFIX)) { 138 node.expression = node.expression.substring(0, node.expression.indexOf(OLDVALUE_SUFFIX)); 139 140 } 141 142 node.values = new String []{returnVal}; 143 144 if (logger.isDebugEnabled()) { 145 logger.debug("*********************************************\n" + 146 "process with key \"" + key + "\" and expression \"" + node.expression + "\"" + "and result: " + returnVal + "\n" + 147 "*********************************************\n"); 148 } 149 } 150 } 151 152 public CheckBox() 153 { 154 super(); 155 } 156 157 160 public String getTagName() 161 { 162 return "CheckBox"; 163 } 164 165 173 public void setAttribute(String name, String value, String facet) 174 throws JspException 175 { 176 if (name != null) { 177 if (name.equals(TYPE) || name.equals(VALUE) || name.equals(CHECKED)) { 178 String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object []{name}); 179 registerTagError(s, null); 180 } 181 else { 182 if (name.equals(DISABLED)) { 183 _state.disabled = true; 184 return; 185 } 186 } 187 } 188 189 super.setAttribute(name, value, facet); 190 } 191 192 197 protected AbstractHtmlState getState() 198 { 199 return _state; 200 } 201 202 208 protected List getNamingChain() 209 { 210 return _internalNamingChain; 211 } 212 213 216 private boolean evaluateDefaultValue() 217 { 218 if (_defaultValue instanceof String ) 219 return Boolean.valueOf((String ) _defaultValue).booleanValue(); 220 if (_defaultValue instanceof Boolean ) 221 return ((Boolean ) _defaultValue).booleanValue(); 222 return false; 223 } 224 225 229 public int doStartTag() throws JspException 230 { 231 return EVAL_BODY_BUFFERED; 233 } 234 235 239 public int doAfterBody() throws JspException 240 { 241 return SKIP_BODY; 242 } 243 244 248 public int doEndTag() throws JspException 249 { 250 Tag parent = getParent(); 251 if (parent instanceof CheckBoxGroup) 252 registerTagError(Bundle.getString("Tags_CheckBoxGroupChildError"), null); 253 254 Object val = evaluateDataSource(); 255 if (hasErrors()) 256 return reportAndExit(EVAL_PAGE); 257 258 ByRef ref = new ByRef(); 259 nameHtmlControl(_state, ref); 260 261 String hiddenParamName = _state.name + OLDVALUE_SUFFIX; 262 ServletRequest req = pageContext.getRequest(); 263 264 if (val instanceof String ) { 265 if (val != null && Boolean.valueOf(val.toString()).booleanValue()) 266 _state.checked = true; 267 else 268 _state.checked = false; 269 } 270 else if (val instanceof Boolean ) { 271 _state.checked = ((Boolean ) val).booleanValue(); 272 } 273 else { 274 String oldCheckBoxValue = req.getParameter(hiddenParamName); 275 if (oldCheckBoxValue != null) { 276 _state.checked = new Boolean (oldCheckBoxValue).booleanValue(); 277 } 278 else { 279 _state.checked = evaluateDefaultValue(); 280 } 281 } 282 _state.disabled = isDisabled(); 283 284 String oldValue = req.getParameter(_state.name); 286 WriteRenderAppender writer = new WriteRenderAppender(pageContext); 287 288 if (!_state.disabled) { 292 _hiddenState.name = hiddenParamName; 293 if (oldValue == null) { 294 _hiddenState.value = "false"; 295 } 296 else { 297 _hiddenState.value = oldValue; 298 } 299 TagRenderingBase hiddenTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_HIDDEN_TAG, req); 300 hiddenTag.doStartTag(writer, _hiddenState); 301 hiddenTag.doEndTag(writer); 302 } 303 304 _state.type = INPUT_CHECKBOX; 305 306 TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.INPUT_BOOLEAN_TAG, req); 307 br.doStartTag(writer, _state); 308 309 if (!ref.isNull()) 310 write((String ) ref.getRef()); 311 312 localRelease(); 314 return EVAL_PAGE; 315 } 316 317 320 protected void localRelease() 321 { 322 super.localRelease(); 323 324 _state.clear(); 325 _hiddenState.clear(); 326 } 327 328 334 335 353 public void setAccessKey(char accessKey) 354 { 355 if (accessKey == 0x00) 356 return; 357 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ACCESSKEY, Character.toString(accessKey)); 358 } 359 360 369 public void setAlt(String alt) 370 { 371 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt); 372 } 373 374 385 public void setTabindex(int tabindex) 386 { 387 _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, TABINDEX, Integer.toString(tabindex)); 388 } 389 } 390 | Popular Tags |