To answer my own question in case anybody else has the same problem:

It is not possible out of the box. You have to pass null together with the other options to RadioChoice and then set your own ChoiceRenderer which returns the localized value in the same way as
AbstractSingleSelectChoice.getDefaultChoice() does for DropDownChoice.
To achieve this I pass a reference to the component to the renderer and then return the localized
value in getDisplayValue(), e.g like this:

String getDisplayValue(Object value) {
  if (value != null) {
     return value.toString();
  } else {
String result = component.getLocalizer().getStringIgnoreSettings(component.getId() + ".nullValid", component, null, null);
    if (Strings.isEmpty(result)) {
result = component.getLocalizer().getString("nullValid", component, "");
    }
    return result;
  }
}

In order to get a pre-selected null value you have to return "-1" (AbstractSingleSelectChoice#NO_SELECTION_VALUE)
in getIdValue().

This is kind of a hack for several reasons:
- code from AbstractSingleSelectChoice.getDefaultChoice() is duplicated.
- some magic constants are re-used but unfortunately there are no constants in Wicket for them
  (e.g. ".nullValid" or "-1" for the null ID) or they are not public.
- the renderer keeps a reference to the component it is attached to



On 02.07.2009, at 19:30, Robin Sander wrote:


Hello,

is it possible to get RadioChoice behave more like DropDownChoice concerning a null value? Consider a RadioChoice defining a search parameter, e.g. two values 'male' and 'female' and a third one
meaning "doesn't matter".
With a DropDownChoice I could easily use setNullValid(true) and then define a property <fieldID>.nullValid
which is them used for the null value.
Looking into the source it seems that DropDownChoice always adds getDefaultChoice() which does the magic while RadioChoice does not. Can anyone elaborate on this topic? Is there a workaround?

Background is that I have dozens of enums with property files for localization and a self-written EnumChoiceRenderer which does the localization. So if I have a property of (enum) type Gender which defines Gender.MALE and Gender.FEMALE I can't easily define a special "NULL" value
without modifying the enum.
So the only option I see would be to really pass null to the RadioChoice or to define a special enum (like GenderWithNull) for any enum I want to use in a RadioChoice.

regards,

Robin.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to