在Vaadin中使用BeanItemContainer和TreeTable时遇到麻烦

时间:2014-08-01 22:47:13

标签: javabeans vaadin treetable

我已经审核了多个示例,了解如何从TreeTable数据源构建Container,只添加迭代Object[][]的项目。我仍然被我的用例困住了。

我有一个像这样的豆......

public class DSRUpdateHourlyDTO implements UniquelyKeyed<AssetOwnedHourlyLocatableId>, Serializable
{
private static final long serialVersionUID = 1L;
private final AssetOwnedHourlyLocatableId id = new AssetOwnedHourlyLocatableId();

private String commitStatus;
private BigDecimal economicMax;
private BigDecimal economicMin;

public void setCommitStatus(String commitStatus) { this.commitStatus = commitStatus; }
public void setEconomicMax(BigDecimal economicMax) { this.economicMax = economicMax; }
public void setEconomicMin(BigDecimal economicMin) { this.economicMin = economicMin; }

public String getCommitStatus() { return commitStatus; }
public BigDecimal getEconomicMax() { return economicMax; }
public BigDecimal getEconomicMin() { return economicMin; }
public AssetOwnedHourlyLocatableId getId() { return id; }

@Override
public AssetOwnedHourlyLocatableId getKey() {
    return getId();
}

}

AssetOwnedHourlyLocatableId是复合ID。它看起来像......

public class AssetOwnedHourlyLocatableId implements Serializable, AssetOwned, HasHour, Locatable,
UniquelyKeyed<AssetOwnedHourlyLocatableId> {

private static final long serialVersionUID = 1L;

private String location;

private String hour;

private String assetOwner;

@Override
public String getLocation() {
    return location;
}

@Override
public void setLocation(final String location) {
    this.location = location;
}

@Override
public String getHour() {
    return hour;
}

@Override
public void setHour(final String hour) {
    this.hour = hour;
}

@Override
public String getAssetOwner() {
    return assetOwner;
}

@Override
public void setAssetOwner(final String assetOwner) {
    this.assetOwner = assetOwner;
}

}

我想生成一个网格,其中hour被转移到列标题中,location是唯一的其他列标题。

如,

Location    1   2   3   4   5   6   ...   24

将是列标题。

在每个列的下方,您可能会看到......

> L1 
  > Commit Status    Status1 .... Status24
  > Eco Min          EcoMin1 .... EcoMin24
  > Eco Max          EcoMax1 .... EcoMax24
> L2
  > Commit Status    Status1 .... Status24
  > Eco Min          EcoMin1 .... EcoMin24
  > Eco Max          EcoMax1 .... EcoMax24

所以,如果我提供List<DSRUpdateHourlyDTO>,我想将其转换为上述演示文稿格式。

最好的方法是什么?

我还有一些额外的功能要求。

  • 我希望能够在同一个表的只读和可编辑视图之间切换。
  • 我希望能够完成数据源的往返(例如,JPAContainerSource)。
  • 我(最终)希望按复合ID的任何部分过滤项目。

我的挑战在于适应。我很清楚这个简单的用例,我可以将其列入BeanItemContainer并使用addNestedContainerPropertysetVisibleColumns。将属性转换为列似乎是让我感到难过的。

1 个答案:

答案 0 :(得分:0)

事实证明这是一个构思错误的问题。

出于数据输入的目的,可以使用BeanItemContainer并使列包含来自复合hour的嵌套容器属性id而不是TreeTable,使用TablecommitStatusecoMin作为列的ecoMax。限制:您只能查询/提交一个assetOwnerlocation的数据。

对于显示,您无需过滤一个assetOwnerlocation的数据,您可以将hour信息转换为原始数据描述。您可以将原始bean转换为适合显示的另一个bean(每小时都是自己的列)。