gpt4 book ai didi

java - 按实体中未包含的列对数据表进行排序/过滤

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:16 25 4
gpt4 key购买 nike

我有一个数据表,其中包含在我的实体中定义的列。我还在 index.xhtml 中添加了另一个名为 total 的列:

...
<p:column headerText="total">
<h:outputText value="#{bean.total}" />
</p:column>
...

此列计算并返回每行中列的总和。一切正常,除了当我想按列排序/过滤时,total 列保持不变。

我想我也应该在我的实体中添加 total 字段,但这似乎不切实际。对于这种情况,primefaces 有更好更直接的解决方案吗?

最佳答案

既然你希望实体类保持不可变,我可以想到两种解决方案:

1) 创建实体的子类,但不要将其声明为实体。您还可以创建一个包装类,接收 Entity 作为构造函数参数,并通过 getter 和 setter 直接操作原始对象上的数据。子类化的优点是已经继承了公共(public)方法,但缺点是必须关心数据。

检查 this answer关于为什么不将实体子类化为实体以及持久性问题。

public class EntitySubclass extends Entity {

private Entity parent;

public EntitySubclass(Entity parent) {
this.parent = parent;
// set all data from parent to this entity.
}

// fetch the parent object for persistance.
public Entity getParent() {
// set all data from this to parent.
}

public int getTotal() {
int iDidMathOnEntityData = 0;
// do math
return iDidMathOnEntityData;
}

}

jsf:

<p:column headerText="total">
<h:outputText value="#{subClass.total}" />
</p:column>

2) 使用 rowIndexVar ( https://stackoverflow.com/a/5704087/1532705 ) 并在托管 Bean 上调用一个方法,将 rowIndexVar 作为参数传递。然后获取相应的实体并进行数学运算。 Requires EL 2.2 .

<p:column headerText="total">
<h:outputText value="#{bean.total(rowIndexVar)}" />
</p:column>

托管 bean :

public int total(int rowIndexVar) {
int iDidMathOnEntityData = 0;
Entity e = getEntityByIndex(rowIndexVar);
// do some math
return iDidMathOnEntityData;
}

3)如果有同样问题的人编辑实体没有问题,可以添加getTotal()方法为@Transient:

    @Transient
public int getTotal() {
int iDidMathOnEntityData = 0;
// do math
return iDidMathOnEntityData;
}

关于java - 按实体中未包含的列对数据表进行排序/过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com