GWT编辑器框架:下拉列表

时间:2011-06-23 04:31:34

标签: gwt editor requestfactory

我正在寻找有人指出我正确的方向(链接)或提供一个代码示例,用于使用RequestFactory和{{1}实现多对一关系的下拉列表} Editor中的框架。我项目的其中一个模型有多对一的关系:

GWT

当我构建视图以添加/编辑图书时,我想显示一个下拉列表,可用于选择哪位作者编写图书。如何使用@Entity public class Book { @ManyToOne private Author author; } 框架完成这项工作?

2 个答案:

答案 0 :(得分:4)

对于下拉列表,您需要一个ValueListBox<AuthorProxy>,它恰好是AuthorProxy的编辑器,所以一切都很顺利。但是,您需要填充列表(setAcceptableValues),因此您可能必须向服务器发出加载作者列表的请求。

注意setAcceptableValues自动将当前值(由getValue返回,默认为null)添加到列表中(setValue会自动将值添加到列表中如果需要,也可以使用可接受的值),因此请确保将null作为可接受的值传递,或者在调用{{1}之前使用列表中的值调用setValue }。

答案 1 :(得分:0)

我知道这是一个老问题,但无论如何这里是我的两分钱。

我遇到类似情况的麻烦。问题是可接受的值(AuthorProxy个实例)的检索RequestContextBookEditor用于编辑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;
        }
    });
}

这个解决方案对我来说似乎没问题。我希望它可以帮助别人。