以编程方式将“选择一个”替换为另一个文本

时间:2015-02-07 14:28:09

标签: wicket dropdownchoice

我需要以编程方式将DropDownChoice中的“选择一个”文本替换为另一个文本。 (即,我不能将替换文本放在.properties文件中,如建议here。)我如何实现这一目标?

为了给出一些上下文,我的对象看起来大致像

FruitOption
    "No fruit chosen"
    Orange
    Banana

AnimalOption
    "No animal chosen"
    Dog
    Cat

"No _____ chosen" 字符串是option-object的一部分,并从数据库加载。

我意识到我可以使用一个空对象模式,并在ChoiceRenderer中给null对象一个特殊的处理,但我不愿意,因为choice-objects是一个抽象类型,不方便创建一个虚拟 - 对象。

1 个答案:

答案 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";
}