4

在 DropDownChoice 的检票口 IChoiceRenderer 中使用如下:

IChoiceRenderer renderer = new IChoicerRenderer() {
    public Object getDisplayValue(Object object) {
        return ((Country) object).getName();
    }

    public String getIdValue(Object object, int index) {    
        return ((Country) object).getId() + "";
    }
};

countries.setChoiceRenderer(renderer);

IChoiceRenderer 类的规范声明:

呈现一种选择。将用于内部表示的“id”值与“显示值”分开,“显示值”是向使用此渲染器的组件的用户显示的值。

getDisplayValue() 的描述是:

获取向最终用户显示的值。

这意味着它有助于显示国家/地区的名称。对?

getIdValue() 的描述是:

调用此方法来获取对象的 id 值(用作选择元素的 value 属性) id 可以像主键一样从对象中提取,或者如果列表稳定,您可以只返回一个 toString指数。

这是什么意思?

一般来说,这里的 DropDownChoice 等各种检票口组件的模型的 id 属性是 Long 类型。getIdValue() 是否有助于对其进行排序?

或者有助于为 HTML 生成 id 标签?

上述“主键”的概念是什么?

谢谢并恭祝安康。

4

2 回答 2

4

想象一下,对象将被放入一个映射中,其中 id 是键,值是您希望它引用的对象。如果您的两个对象共享相同的 id,或者如果对象的 id 发生更改,则您的地图将无法正常工作。

这就是他们说它应该是主键的意思。

顺便说一句,您不必IChoiceRenderer在简单的情况下从头开始实施,在您的情况下,您可以使用new ChoiceRenderer( "name", "id" );

于 2011-05-09T19:25:23.360 回答
1

在下拉列表中,您将拥有作为键值对的项目。因此,使用您的国家/地区示例,请考虑以下国家到国家/地区代码的映射:

Key             Value
---------------------
Afghanistan     AF
Aland Islands   AX
Albania         AL
Algeria         DZ
American Samoa  AS
Andorra         AD
Angola          AO 

如果用户选择 Algeria,则该密钥DZ用于唯一标识他们的选择。因此,如果主对象是Person带有countryOfCitizenship属性的 a,则该属性将设置为Country带有 id 的DZ。Wicket 使用 id 将下拉列表中的选择设置为属性的值。它还使用 id 来确定在为具有该属性集的对象显示页面时从下拉列表中选择哪个值。

于 2011-05-09T17:15:46.417 回答