我想在列表模式下过滤 OpenXava 中的标签。
因此我有一个名为Tag ( with
int id, String name and String description
)的简单实体我有一个嵌入式 Entity Details,它包含标签引用,如下所示:
@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();
}
- 我的“主要”实体,称为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;
...
这会在列表模式中创建一个“标签”列,它由一个字符串表示,例如:“a,b,c,d”
为了在列表模式下过滤,OpenXava 默认有一个输入框,您可以在其中输入一个字符串,如:“a,b”,以获取所有带有标签“a”和“b”的条目
但是,如果我输入“a,c”,则不会显示任何结果,即使有带有标签“a,b,c,d”的条目
我的目标/问题:
我想要一个灵活的过滤器,我可以在其中输入如下内容:“a,c”并获取包含标签“a”和“c”的所有条目
我尝试通过 Target 实体中的"TagFilter.class"
with来实现它"baseCondition="${tags} = ?"
,但没有可用的结果