Вы можете переопределить AbstractSingleSelectChoice.getNullKey()
и AbstractSingleSelectChoice.getNullValidKey()
, чтобы заставить Wicket получать локализованный ресурс из файла .properties или .xml, в котором идентификатор компонента не имеет часть ключа. Это задокументировано в этой проблеме JIRA: Открыть ключ интернационализации нулевого значения DropDownChoice
Например:
DropDownChoice ddc = new DropDownChoice(id, model, choices){
@Override
protected String getNullKey(){ return "customDdcNullValue"; }
@Override
protected String getNullValidKey(){ return "customDdcNullValue"; }
}
Извлечет текст <option>
из свойства customDdcNullValue
.
Эти методы, кажется, были добавлены в версии 1.4.4, если вы используете 1.3, вы всегда можете использовать IChoiceRenderer
с DropDownChoice
, который возвращает правильную строку в случае значения null
. Обратите внимание, что вы можете извлечь его из ресурсов (с помощью getString()
или StringResourceModel
) или получить значение из базы данных / кэша, если это необходимо. Это может зависеть от того, как вы уже локализуете выбор для ненулевых значений.
Кроме того, вы можете использовать исходный код AbstractSingleSelectChoice.getDefaultChoice()
, чтобы бросить свой собственный DropDownChoice
с таким поведением.
ОБНОВЛЕНИЕ : Другой способ справиться с этим - предоставить собственное значение, представляющее null
, или не выбирать. Просто не забудьте использовать setNullValid(false)
на DropDownChoice
, чтобы предотвратить появление null
, когда есть выбранное значение, и инициализировать модель постоянного тока с вашим значением без выбора, когда вы все еще не знаете его значение, чтобы избежать Калибруй null
при звонке getDefaultChoice()
.
При определении значения для опции без выбора обратите особое внимание на эту часть AbstractSingleSelectChoice.getDefaultChoice()
:
// Null is not valid. Is it selected anyway?
if ((selected == null) || getNoSelectionValue().equals(selected) ||
selected.equals(EMPTY_STRING))
{
Примите во внимание, что getNoSelectionValue()
возвращает -1
, поэтому, пожалуйста, не используйте -1
, или пустую строку, в качестве пользовательского значения NULL. Я научился этому нелегко, поверь мне, это не приятно.