3

我需要以DropDownChoice编程方式将 a 中的“Choose One”文本替换为另一个文本。(即我不能按照这里的建议将替换文本放入 .properties 文件中。)我该如何实现呢?

为了提供一些背景信息,我的对象看起来大致像

FruitOption
    "No fruit chosen"
    Orange
    Banana

AnimalOption
    "No animal chosen"
    Dog
    Cat

并且"No _____ chosen"字符串是选项对象的一部分并从数据库加载。

我意识到我可以使用空对象模式,并在 ChoiceRenderer 中对空对象进行特殊处理,但我不希望这样做,因为选择对象属于抽象类型,不方便为其创建虚拟对象。

4

1 回答 1

4

以下所有面向 NULL 的方法都在:(AbstractSingleSelectChoice参见在线 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";
}
于 2015-02-07T19:53:08.707 回答