Combobox 瓦丁组合盒&;LQC
有人能提供数据绑定select和LazyQueryContainer的完整示例吗?也欢迎使用其他容器进行绑定。(方法中的LQC包含容器中的预期索引而不是项-这是不同的行为) 我无法使用简单的示例: 第一个表:货币(ID、代码、名称)。。。。{1美元,多拉;2欧元,欧元} 第二个表交换率(ID、CcyFrom、CcyTo、汇率、ValidFrom)。。。{1,1,2,1.5152011/01/01;…} 我有一个容器,其中包含来自Currency的所有记录。我将其设置为选择的源Combobox 瓦丁组合盒&;LQC,combobox,containers,vaadin,Combobox,Containers,Vaadin,有人能提供数据绑定select和LazyQueryContainer的完整示例吗?也欢迎使用其他容器进行绑定。(方法中的LQC包含容器中的预期索引而不是项-这是不同的行为) 我无法使用简单的示例: 第一个表:货币(ID、代码、名称)。。。。{1美元,多拉;2欧元,欧元} 第二个表交换率(ID、CcyFrom、CcyTo、汇率、ValidFrom)。。。{1,1,2,1.5152011/01/01;…} 我有一个容器,其中包含来自Currency的所有记录。我将其设置为选择的源 Select re
Select result = new Select("Select currency", currencies); result.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY); result.setItemCaptionPropertyId("code");
它很好用
我有第二个容器,其中包含一些选择的ExchangeRate。我将其绑定到表单,将TextField替换为select。
现在我想设置正确的值来选择。。。。但是select.setValue(newValue)不起作用,当我调试它时,我发现newValue不起作用;在集装箱上找不到。。。我怎样才能把它做好
《瓦丁书》中有几个例子,不幸的是,它们没有使用LQC或不使用LQC;'t将容器用于选择源(弹出窗口和值) 我正在使用Criteria容器(Lazy Query容器的子类),但是它似乎与ComboBox不兼容,因为LQC提供了需要该项的索引和ComboBox-请参阅 我使用的解决方法只是将所有实体加载到BeanItemContainer中,如下所示。在这种情况下,我只需要处理几千个条目,它的性能令人惊讶
BeanItemContainer<Contact> bic = new BeanItemContainer<Contact>(Contact.class);
List<Contact> contacts = dao.all(Contact.class, Contact_.lastName);
bic.addAll(contacts);
ComboBox cb = new ComboBox("Please select contact");
cb.setContainerDataSource(bic);
BeanItemContainer bic=新的BeanItemContainer(Contact.class);
List contacts=dao.all(Contact.class,Contact.lastName);
bic.addAll(联系人);
组合框cb=新组合框(“请选择联系人”);
cb.setContainerDataSource(bic);
在开始缩放用户时,向组合框添加几千个项目是不可行的。记住,所有这些都隐藏在HttpSession
中。如果你不小心的话,你的内存消耗会大增
我最近做了一个简单的测试,分析了一个应用程序,它使用了IndexedContainer
和BeanItemContainer
,消耗的内存量非常不同。测试中的BeanItem
是一个持久的JPA实体,具有许多关系和属性。对于组合框,我们实际上只需要两个属性:id和name
BeanItemContainer
每个用户消耗50MB,而IndexedContainer
每个用户消耗2MB。因此,正如您所看到的,如果您不小心会话中存储了什么类型的信息,它将无法很好地扩展。IMHO甚至2MB都不能令人满意,更好的设计应该使用惰性查询容器
BeanItemContainer
将创建每个字段/关联的副本,无论其中是否包含数据,这是内存差异的主要原因。Eclipse内存分析器插件非常适合分析堆转储:)
class EditViewTest{
专用组合框组合框
@试验
void serialize(){
BeanItemContainer=新的BeanItemContainer(组织)
addAll(getAllOrgs().sort({a,b->a.name b.name}))
comboBox=新的comboBox('组织',容器)
comboBox.setItemCaptionMode(选择.ITEM\u CAPTION\u MODE\u属性)
comboBox.setItemCaptionPropertyId(“名称”)
长文件长度
def temp=File.createTempFile('orgs','.ser'))
试一试{
temp.withObjectOutputStream{out->
出来
comboBox.addItem(org.id)
comboBox.setItemCaption(org.id,org.name)
}
长文件长度
def temp=File.createTempFile('orgs','.ser'))
试一试{
temp.withObjectOutputStream{out->
甚至这条线都有点旧了。。。
我认为另一个解决方案是使用带有分页的核心Vaadin容器。
这将确保客户设置最大记录数。
另一方面,我很好奇是否可以使用LazyQueryCOntainer使用遗留dao实现,而不是通过实现QUeryFactory接口。
任何反馈都是有帮助的。SQLContainer
您要求提供其他容器类型示例。下面是的示例(请参阅)
以博客帖子为例
我在2012-11年的一篇帖子中发现了这个优秀而简单的例子。详细信息请参见帖子。下面是他的代码片段。我已经添加或修改了一些注释
代码片段
创建一个loads
方法以返回容器数据源。此方法创建一个如下所示的SQLContainer
TableQuery q = new TableQuery("suburb", connectionPool);
suburbContainer = new SQLContainer(q);
调用该方法,将结果传递给combobox
ComboBox suburbCB = new ComboBox();
suburbCB.addItem("");
suburbCB.setCaption("Filter by Suburb");
suburbCB.setContainerDataSource(app.getDatabase().loadSuburbs()); // Hook-up SQLContainer.
// Specify which Property (field) in the SQLContainer to display as content in the ComboBox.
// If omitted, the 'id' Property appears as content.
suburbCB.setItemCaptionPropertyId("name");
suburbCB.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
// Set a reasonable width
suburbCB.setWidth(350, UNITS_PIXELS);
// Set the appropriate filtering mode for this example, allowing user to type-ahead.
suburbCB.setFilteringMode(Filtering.FILTERINGMODE_STARTSWITH);
suburbCB.setImmediate(true);
ComboBox suburbCB = new ComboBox();
suburbCB.addItem("");
suburbCB.setCaption("Filter by Suburb");
suburbCB.setContainerDataSource(app.getDatabase().loadSuburbs()); // Hook-up SQLContainer.
// Specify which Property (field) in the SQLContainer to display as content in the ComboBox.
// If omitted, the 'id' Property appears as content.
suburbCB.setItemCaptionPropertyId("name");
suburbCB.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
// Set a reasonable width
suburbCB.setWidth(350, UNITS_PIXELS);
// Set the appropriate filtering mode for this example, allowing user to type-ahead.
suburbCB.setFilteringMode(Filtering.FILTERINGMODE_STARTSWITH);
suburbCB.setImmediate(true);