1

在我的应用程序中,每个 Foo 都有一个类别。Foo.Category 是类 Foo 中的一个内部枚举。在其给定的表单页面上创建 Foo 时,用户从键入到枚举的下拉列表中选择一个类别。但是,此选择是可选的。

现在,在另一个页面上,我希望能够按名称和类别搜索 Foo。此搜索表单CheckBoxMultipleChoice<Foo.Category>也键入了相同的内部枚举。检查的值被发送到 DAO,它使用“where category in”子句查询我的数据库。

我想在复选框中添加“空白/无”选项,以便在发送到 DAO 时,如果选中,我可以在查询中添加“或类别为空”。由于我的复选框是键入到枚举中的,这甚至可能吗?

编辑:不确定这是否重要,但我的枚举具有由 SHORTNAME 指定的值,但每个都有一个字符串 LongerAndMoreDescriptiveName,并且枚举覆盖toString()以返回此值。SHORTNAME 是我存储在数据库中的内容,并在 where 子句中使用,但 Longer 是 UI 上显示的内容。我曾短暂考虑过更改为 CheckBoxMultipleChoice 并添加空白选项,但我将如何解决值之间的差异?

4

1 回答 1

1

直接是不可能的。CheckBoxMultipleChoice 中没有“无值”选项(如 DropDownChoice 中),因为在未选择任何内容时组件的模型为 null。

我想,你有两个选择:

1) 将常量 Category.NONE 添加到 Foo.Category 枚举中,并在用户选择类别的下拉选项中对其进行相应处理。

2) 为 Foo.Category 常量创建一个包装类(类似于 Optional<Foo.Category>),并在 CheckBoxMultipleChoice 中使用它,而不是直接使用 Foo.Category 常量。Optional<Foo.Category> 的实例将能够具有或不具有相应的 Foo.Category 常量,因此您对选择模型的处理应该是适当的。

于 2012-11-16T11:38:33.410 回答