1 15 package org.apache.tapestry.contrib.form; 16 17 import java.util.ArrayList ; 18 import java.util.List ; 19 20 import org.apache.tapestry.IMarkupWriter; 21 import org.apache.tapestry.IRequestCycle; 22 import org.apache.tapestry.Tapestry; 23 import org.apache.tapestry.form.AbstractRequirableField; 24 import org.apache.tapestry.form.IPropertySelectionModel; 25 import org.apache.tapestry.valid.ValidationStrings; 26 import org.apache.tapestry.valid.ValidatorException; 27 28 97 98 public abstract class MultiplePropertySelection extends AbstractRequirableField 99 { 100 103 public static final IMultiplePropertySelectionRenderer DEFAULT_CHECKBOX_RENDERER = new CheckBoxMultiplePropertySelectionRenderer(); 104 105 public abstract List getSelectedList(); 106 107 public abstract void setSelectedList(List selectedList); 108 109 protected void finishLoad() 110 { 111 setRenderer(DEFAULT_CHECKBOX_RENDERER); 112 setRequiredMessage(ValidationStrings.getMessagePattern(ValidationStrings.REQUIRED_SELECT_FIELD, getPage().getLocale())); 113 } 114 115 118 public String getSubmittedValue(IRequestCycle cycle) 119 { 120 return super.getSubmittedValue(cycle); 121 } 122 123 126 protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) 127 { 128 super.renderFormComponent(writer, cycle); 129 } 130 131 134 protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle) 135 { 136 super.rewindFormComponent(writer, cycle); 137 } 138 139 142 public void bind(IMarkupWriter writer, IRequestCycle cycle) throws ValidatorException 143 { 144 String [] optionValues = cycle.getParameters(getName()); 146 147 IPropertySelectionModel model = getModel(); 148 149 List selectedList = new ArrayList (getModel().getOptionCount()); 150 151 if (optionValues != null) 153 { 154 for (int i = 0; i < optionValues.length; i++) 156 { 157 Object selectedValue = model.translateValue(optionValues[i]); 159 160 selectedList.add(selectedValue); 162 } 163 } 164 165 this.setSelectedList(selectedList); 166 } 167 168 174 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) 175 { 176 List selectedList = getSelectedList(); 177 178 if (selectedList == null) 179 throw Tapestry.createRequiredParameterException(this, "selectedList"); 180 181 IPropertySelectionModel model = getModel(); 182 183 if (model == null) 184 throw Tapestry.createRequiredParameterException(this, "model"); 185 186 IMultiplePropertySelectionRenderer renderer = getRenderer(); 187 188 renderer.beginRender(this, writer, cycle); 190 191 int count = model.getOptionCount(); 192 193 for (int i = 0; i < count; i++) 194 { 195 Object option = model.getOption(i); 196 197 boolean optionSelected = selectedList.contains(option); 199 200 renderer.renderOption(this, writer, cycle, model, option, i, optionSelected); 201 } 202 203 renderer.endRender(this, writer, cycle); 206 } 207 208 public abstract IPropertySelectionModel getModel(); 209 210 public abstract IMultiplePropertySelectionRenderer getRenderer(); 211 212 public abstract void setRenderer(IMultiplePropertySelectionRenderer renderer); 213 } | Popular Tags |