Author: gseitz Date: Wed May 7 01:54:15 2008 New Revision: 654044 URL: http://svn.apache.org/viewvc?rev=654044&view=rev Log: WICKET-1590: use IChoiceRenderer (if available) for the Label, for real now
Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java?rev=654044&r1=654043&r2=654044&view=diff ============================================================================== --- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java (original) +++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java Wed May 7 01:54:15 2008 @@ -18,9 +18,12 @@ import java.util.List; +import org.apache.wicket.Application; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.WebComponent; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.IChoiceRenderer; @@ -28,6 +31,7 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import org.apache.wicket.util.convert.IConverter; /** @@ -218,28 +222,53 @@ @Override protected WebComponent<T> newLabel(MarkupContainer< ? > parent, String componentId, - final IModel<T> model) + IModel<T> model) { - IModel<T> wrapper = new AbstractReadOnlyModel<T>() + Label<T> label = new Label<T>(componentId, model) { private static final long serialVersionUID = 1L; @Override - @SuppressWarnings("unchecked") - public T getObject() + public IConverter<T> getConverter(Class<T> type) + { + IConverter<T> c = AjaxEditableChoiceLabel.this.getConverter(type); + return c != null ? c : super.getConverter(type); + } + + @Override + protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { + String displayValue = getModelObjectAsString(); if (renderer != null) { - return (T)renderer.getDisplayValue(model.getObject()); + Object displayObject = renderer.getDisplayValue(getModelObject()); + Class< ? > objectClass = (displayObject == null ? null + : displayObject.getClass()); + + + if (objectClass != null && objectClass != String.class) + { + final IConverter converter = Application.get() + .getConverterLocator() + .getConverter(objectClass); + + displayValue = converter.convertToString(displayObject, getLocale()); + } + } + + if (displayValue == null || "".equals(displayValue)) + { + replaceComponentTagBody(markupStream, openTag, defaultNullLabel()); } else { - return model.getObject(); + replaceComponentTagBody(markupStream, openTag, displayValue); } } - }; - return super.newLabel(parent, componentId, wrapper); + label.setOutputMarkupId(true); + label.add(new LabelAjaxBehavior(getLabelAjaxEvent())); + return label; } @Override