我正在寻找有人指出我正确的方向(链接)或提供一个代码示例,用于使用RequestFactory
和{{1}实现多对一关系的下拉列表} Editor
中的框架。我项目的其中一个模型有多对一的关系:
GWT
当我构建视图以添加/编辑图书时,我想显示一个下拉列表,可用于选择哪位作者编写图书。如何使用@Entity
public class Book {
@ManyToOne
private Author author;
}
框架完成这项工作?
答案 0 :(得分:4)
对于下拉列表,您需要一个ValueListBox<AuthorProxy>
,它恰好是AuthorProxy
的编辑器,所以一切都很顺利。但是,您需要填充列表(setAcceptableValues
),因此您可能必须向服务器发出加载作者列表的请求。
注意setAcceptableValues
自动将当前值(由getValue
返回,默认为null
)添加到列表中(setValue
会自动将值添加到列表中如果需要,也可以使用可接受的值),因此请确保将null
作为可接受的值传递,或者在调用{{1}之前使用列表中的值调用setValue
}。
答案 1 :(得分:0)
我知道这是一个老问题,但无论如何这里是我的两分钱。
我遇到类似情况的麻烦。问题是可接受的值(AuthorProxy
个实例)的检索RequestContext
与BookEditor
用于编辑BookProxy
的{{1}}不同。
结果是当我尝试编辑AuthorProxy
对象时,ValueListBox
中始终重复当前BookProxy
。经过一些研究后,我在GWT Google小组中找到了this post,其中Thomas解释说
“EntityProxy#equals()实际上比较了他们的请求上下文和stableId()。”
因此,由于我无法更改编辑工作流程,因此我选择通过设置在比较过程中使用不同对象字段的自定义ValueListBox
来更改ProvidesKey
处理其值的方式。 / p>
我的最终解决方案与此相似:
@UiFactory
@Ignore
ValueListBox<AuthorProxy> createValueListBox ()
{
return new ValueListBox<AuthorProxy>(new Renderer<AuthorProxy>()
{
...
}, new ProvidesKey<AuthorProxy>()
{
@Override
public Object getKey (AuthorProxy author)
{
return (author != null && author.getId() != null) ? author.getId() : Long.MIN_VALUE;
}
});
}
这个解决方案对我来说似乎没问题。我希望它可以帮助别人。