vaadin setItemCaptionPropertyId 在组合框中有多个标题
vaadin setItemCaptionPropertyId more then one caption in combobox
我使用 BeanItemContainer 填充组合框,如下所示:
//filling the combobox with UserDTO's by BeanContainer
BeanItemContainer<SubCategoryDTO> beanContainer = new BeanItemContainer<SubCategoryDTO>(
SubCategoryDTO.class);
ArrayList<SubCategoryDTO> subcategorys = qpc.getSubcategorys();
beanContainer.addAll(subcategorys);
cmbCategory.setContainerDataSource(beanContainer);
cmbCategory.setItemCaptionMode(ItemCaptionMode.ID);
cmbCategory.setImmediate(true);
cmbCategory.setNewItemsAllowed(false);
cmbCategory.setNullSelectionAllowed(false);
cmbCategory.setItemCaptionPropertyId("name");
DTO 具有以下字段:
public class SubCategoryDTO extends Observable implements Serializable {
private static final long serialVersionUID = 1L;
private int subCategoryId;
private String name;
private CategoryDTO category;
...
我想让组合框的 ItemCaption 显示名称和类别名称(DTO 也有一个名称字段),所以我会得到类似这样的内容:categoryName subCategoryName
有办法吗?任何建议,将不胜感激!感谢
有办法(可能有更简单的方法)。您可以遍历 ComboBox 中的项目并设置项目标题。
像这样:
for(Object subCatDTO : cbmCategory.getItemIds()){
SubCategoryDTO subCategoryDTO = (SubCategoryDTO) subCatDTO;
cbmCategory.setItemCatption(subCatDTO, subCategoryDTO.getName + " " + subCategoryDTO.getCategory().getName());
}
我认为这可以解决您的问题。
更多信息:https://vaadin.com/forum/#!/thread/1394968
您可以使用 ItemCaptionMode.EXPLICIT
和 combo.setItemCaption(id, caption)
在组合框本身上设置项目标题,或者向您的 bean 添加只读 属性:
public class SubCategoryDTO {
private String name;
private CategoryDTO parent;
public String getCaption() {
return parent.getName() + " " + name;
}
}
并使用 ItemCaptionMode.PROPERTY
和 combo.setItemCaptionPropertyId("caption")
。同样,您可以将字幕逻辑放在覆盖的 toString()
中并使用 ItemCaptionMode.ITEM
我使用 BeanItemContainer 填充组合框,如下所示:
//filling the combobox with UserDTO's by BeanContainer
BeanItemContainer<SubCategoryDTO> beanContainer = new BeanItemContainer<SubCategoryDTO>(
SubCategoryDTO.class);
ArrayList<SubCategoryDTO> subcategorys = qpc.getSubcategorys();
beanContainer.addAll(subcategorys);
cmbCategory.setContainerDataSource(beanContainer);
cmbCategory.setItemCaptionMode(ItemCaptionMode.ID);
cmbCategory.setImmediate(true);
cmbCategory.setNewItemsAllowed(false);
cmbCategory.setNullSelectionAllowed(false);
cmbCategory.setItemCaptionPropertyId("name");
DTO 具有以下字段:
public class SubCategoryDTO extends Observable implements Serializable {
private static final long serialVersionUID = 1L;
private int subCategoryId;
private String name;
private CategoryDTO category;
...
我想让组合框的 ItemCaption 显示名称和类别名称(DTO 也有一个名称字段),所以我会得到类似这样的内容:categoryName subCategoryName
有办法吗?任何建议,将不胜感激!感谢
有办法(可能有更简单的方法)。您可以遍历 ComboBox 中的项目并设置项目标题。
像这样:
for(Object subCatDTO : cbmCategory.getItemIds()){
SubCategoryDTO subCategoryDTO = (SubCategoryDTO) subCatDTO;
cbmCategory.setItemCatption(subCatDTO, subCategoryDTO.getName + " " + subCategoryDTO.getCategory().getName());
}
我认为这可以解决您的问题。 更多信息:https://vaadin.com/forum/#!/thread/1394968
您可以使用 ItemCaptionMode.EXPLICIT
和 combo.setItemCaption(id, caption)
在组合框本身上设置项目标题,或者向您的 bean 添加只读 属性:
public class SubCategoryDTO {
private String name;
private CategoryDTO parent;
public String getCaption() {
return parent.getName() + " " + name;
}
}
并使用 ItemCaptionMode.PROPERTY
和 combo.setItemCaptionPropertyId("caption")
。同样,您可以将字幕逻辑放在覆盖的 toString()
中并使用 ItemCaptionMode.ITEM