vaadin setItemCaptionPropertyId在组合框中有一个以上的标题

时间:2015-05-12 08:31:14

标签: java vaadin

我使用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

有没有办法这样做?任何建议将不胜感激! THX

2 个答案:

答案 0 :(得分:2)

您可以使用ItemCaptionMode.EXPLICITcombo.setItemCaption(id, caption)在组合框本身上设置项目标题,或者为您的bean添加只读属性:

public class SubCategoryDTO {

  private String name;
  private CategoryDTO parent;

  public String getCaption() {
    return parent.getName() + " " + name;
  }

}

并使用ItemCaptionMode.PROPERTYcombo.setItemCaptionPropertyId("caption")。同样,您可以将字幕逻辑放在被覆盖的toString()内并使用ItemCaptionMode.ITEM

答案 1 :(得分:0)

有一种方法(可能有更简单的方法)。您可以迭代ComboBox中的项目并设置项目标题。

像这样:

for(Object subCatDTO : cbmCategory.getItemIds()){
    SubCategoryDTO subCategoryDTO = (SubCategoryDTO) subCatDTO;
    cbmCategory.setItemCatption(subCatDTO, subCategoryDTO.getName + " " + subCategoryDTO.getCategory().getName());
}

我认为这可以解决您的问题。 有关详细信息:https://vaadin.com/forum/#!/thread/1394968