Author: gseitz Date: Wed May 7 02:00:26 2008 New Revision: 654047 URL: http://svn.apache.org/viewvc?rev=654047&view=rev Log: WICKET-1590: use IChoiceRenderer (if available) for the Label, for real now
Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java?rev=654047&r1=654046&r2=654047&view=diff ============================================================================== --- wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java (original) +++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java Wed May 7 02:00:26 2008 @@ -22,6 +22,8 @@ import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.MarkupStream; +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; @@ -29,6 +31,8 @@ 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; +import org.apache.wicket.util.string.Strings; /** @@ -206,26 +210,47 @@ } - protected Component newLabel(MarkupContainer parent, String componentId, final IModel model) + protected Component newLabel(MarkupContainer parent, String componentId, IModel model) { - IModel wrapper = new AbstractReadOnlyModel() + Label label = new Label(componentId, model) { private static final long serialVersionUID = 1L; - public Object getObject() + public IConverter getConverter(Class type) { + IConverter c = AjaxEditableChoiceLabel.this.getConverter(type); + return c != null ? c : super.getConverter(type); + } + + protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) + { + String displayValue = getModelObjectAsString(); if (renderer != null) { - return 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 = getConverter(objectClass); + + displayValue = converter.convertToString(displayObject, getLocale()); + } + } + + if (Strings.isEmpty(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; } protected void onModelChanged()