我需要以编程方式将DropDownChoice
中的“选择一个”文本替换为另一个文本。 (即,我不能将替换文本放在.properties文件中,如建议here。)我如何实现这一目标?
为了给出一些上下文,我的对象看起来大致像
FruitOption
"No fruit chosen"
Orange
Banana
AnimalOption
"No animal chosen"
Dog
Cat
和 "No _____ chosen"
字符串是option-object的一部分,并从数据库加载。
我意识到我可以使用一个空对象模式,并在ChoiceRenderer中给null对象一个特殊的处理,但我不愿意,因为choice-objects是一个抽象类型,不方便创建一个虚拟 - 对象。
答案 0 :(得分:4)
以下所有面向NULL的方法都在:AbstractSingleSelectChoice
中声明(参见the online JavaDoc),它是:DropDownChoice
的超类。您可以在组件中定义任何相关的String
值,也可以使用基于属性的格式化消息。查看方法以了解它们的工作方式,然后根据您的需要替换示例实现:
/**
* Returns the display value for the null value.
* The default behavior is to look the value up by
* using the key retrieved by calling: <code>getNullValidKey()</code>.
*
* @return The value to display for null
*/
protected String getNullValidDisplayValue() {
String option =
getLocalizer().getStringIgnoreSettings(getNullValidKey(), this, null, null);
if (Strings.isEmpty(option)) {
option = getLocalizer().getString("nullValid", this, "");
}
return option;
}
/**
* Return the localization key for the nullValid value
*
* @return getId() + ".nullValid"
*/
protected String getNullValidKey() {
return getId() + ".nullValid";
}
/**
* Returns the display value if null is not valid but is selected.
* The default behavior is to look the value up by using the key
* retrieved by calling: <code>getNullKey()</code>.
*
* @return The value to display if null is not valid but is
* selected, e.g. "Choose One"
*/
protected String getNullKeyDisplayValue() {
String option =
getLocalizer().getStringIgnoreSettings(getNullKey(), this, null, null);
if (Strings.isEmpty(option)) {
option = getLocalizer().getString("null", this, CHOOSE_ONE);
}
return option;
}
/**
* Return the localization key for null value
*
* @return getId() + ".null"
*/
protected String getNullKey() {
return getId() + ".null";
}