1 16 17 package org.springframework.web.servlet.tags.form; 18 19 import java.util.Collection ; 20 21 import javax.servlet.jsp.JspException ; 22 23 import org.springframework.util.Assert; 24 import org.springframework.util.CollectionUtils; 25 26 48 public class CheckboxTag extends AbstractHtmlInputElementTag { 49 50 53 private Object value; 54 55 56 60 public void setValue(Object value) { 61 Assert.notNull(value, "'value' must not be null"); 62 this.value = value; 63 } 64 65 69 protected Object getValue() { 70 return this.value; 71 } 72 73 74 78 protected int writeTagContent(TagWriter tagWriter) throws JspException { 79 tagWriter.startTag("input"); 80 writeDefaultAttributes(tagWriter); 81 tagWriter.writeAttribute("type", "checkbox"); 82 83 Object boundValue = getBoundValue(); 84 Class valueType = getBindStatus().getValueType(); 85 86 if (Boolean .class.equals(valueType) || boolean.class.equals(valueType)) { 87 if (boundValue instanceof String ) { 89 boundValue = Boolean.valueOf((String ) boundValue); 90 } 91 Boolean booleanValue = (boundValue != null ? (Boolean ) boundValue : Boolean.FALSE); 92 renderFromBoolean(booleanValue, tagWriter); 93 } 94 95 else { 96 Object value = getValue(); 97 if (value == null) { 98 throw new IllegalArgumentException ("Attribute 'value' is required when binding to non-boolean values"); 99 } 100 101 Object resolvedValue = (value instanceof String ? evaluate("value", (String )value) : value); 102 103 if (boundValue != null && boundValue.getClass().isArray()) { 104 renderFromCollection(resolvedValue, CollectionUtils.arrayToList(boundValue), tagWriter); 105 } 106 else if (boundValue instanceof Collection ) { 107 renderFromCollection(resolvedValue, (Collection ) boundValue, tagWriter); 108 } 109 else { 110 renderSingleValue(resolvedValue, tagWriter); 111 } 112 } 113 114 tagWriter.endTag(); 115 116 if (!isDisabled()) { 117 tagWriter.startTag("input"); 119 tagWriter.writeAttribute("type", "hidden"); 120 tagWriter.writeAttribute("value", "1"); 121 tagWriter.writeAttribute("name", "_" + getName()); 122 tagWriter.endTag(); 123 } 124 125 return EVAL_PAGE; 126 } 127 128 133 private void renderSingleValue(Object resolvedValue, TagWriter tagWriter) throws JspException { 134 tagWriter.writeAttribute("value", getDisplayString(resolvedValue)); 135 136 if (SelectedValueComparator.isSelected(getBindStatus(), resolvedValue)) { 137 tagWriter.writeAttribute("checked", "checked"); 138 } 139 } 140 141 146 private void renderFromCollection(Object resolvedValue, Collection boundValue, TagWriter tagWriter) throws JspException { 147 tagWriter.writeAttribute("value", getDisplayString(resolvedValue)); 148 149 if (SelectedValueComparator.isSelected(getBindStatus(), resolvedValue)) { 150 tagWriter.writeAttribute("checked", "checked"); 151 } 152 } 153 154 159 private void renderFromBoolean(Boolean boundValue, TagWriter tagWriter) throws JspException { 160 tagWriter.writeAttribute("value", "true"); 161 if (boundValue.booleanValue()) { 162 tagWriter.writeAttribute("checked", "checked"); 163 } 164 } 165 166 169 protected String autogenerateId() throws JspException { 170 return TagIdGenerator.nextId(getName(), this.pageContext); 171 } 172 173 } 174 | Popular Tags |