如何在openxava中以列表模式筛选标记(/字符串的一部分)?

xjreopfe  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(353)

我想在openxava的列表模式下过滤标签。

因此,我有一个名为tag(with)的简单实体 int id, String name and String description )
我有一个嵌入的实体详细信息,其中包含标记引用,如下所示:

@Embeddable
public class Detail {

@ManyToOne(fetch = FetchType.LAZY, optional = true)
private Tag tag;

public Tag getTag() {
    return tag;
}

public void setTag(Tag tag) {
    this.tag = tag;
}

@Override
public String toString() {
    return tag.getName();

}

我的“main”实体,称为target,表示一个对象,应该能够用标签标记它。
因此,我们有一个详细信息的集合,将标记分配给目标,而目标不能用列表模式表示

@Tab(name="TargetTab", editors="List", properties="id, tags, manufacturer.name, owner.name, protocolID, idCreationDate, simDBID, remark, changeDate, photo, xphoto")
@Entity
public class Target implements Serializable {

...

@ElemtentCollection
@ListProperties("tag.number, tag.name, tag.description")
@Embedded
Collection<Detail> details;

    public Collection<Detail> getDetails() { 
        return details;
    }

    public void setDetails(Collection<Detail> details) { 
        this.details = details;
        tags = details.toString().substring(1, details.toString().length() - 1);
    }

...

为了在列表模式下表示标记,我创建了一个字符串,其中填充了标记的名称

...
@ReadOnly
String tags;

...

这将在列表模式下创建一个cloumn“tags”,它由一个字符串表示,如:“a,b,c,d”
对于列表模式下的过滤,openxava默认有一个输入框,您可以在其中键入“a,b”这样的字符串,以获取带有标记“a”和“b”的所有条目
但如果我输入“a,c”,则不会显示结果,即使有标记为“a,b,c,d”的条目
我的目标/问题:
我想要一个灵活的过滤器,在其中我可以键入类似“a,c”的内容并获取所有包含标记“a”和“c”的条目
我试着通过一个 "TagFilter.class""baseCondition="${tags} = ?" 在目标实体中,没有可用的结果

wfauudbj

wfauudbj1#

target中的tags属性与details集合的标记值没有关系。target中的tags属性只是表中的一个新列。
您必须选择:
使用@formula定义标记属性
每次添加/删除细节时更新tags属性(可以使用jpa回调方法)

相关问题