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