gpt4 book ai didi

java - 如何在 OpenXava 的列表模式下过滤标签(/字符串的一部分)?

转载 作者:行者123 更新时间:2023-12-01 18:27:26 27 4
gpt4 key购买 nike

我想在 OpenXava 中以列表模式过滤标签。

<小时/>
  1. 因此,我有一个名为 Tag 的简单实体(带有 int id、字符串名称和字符串描述)

  2. 我有一个嵌入式实体详细信息,它保存标签引用,如下所示:

@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();

}
  • 我的“主要”实体称为目标,代表一个对象,应该能够使用标签进行标记。
  • 因此有一个详细信息集合,用于将标签分配给目标,这不能在列表模式中表示

    @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;

    ...

    这会在列表模式下创建一个列“Tags”,它由一个字符串表示,例如:“a,b,c,d”

    对于列表模式下的过滤,OpenXava 默认有一个输入框,您可以在其中键入字符串,例如:“a,b”,以获取带有标签“a”和“b”的所有条目

    但是如果我输入“a,c”,即使有带有标签“a,b,c,d”的条目,也不会显示任何结果

    我的目标/问题:

    我想要一个灵活的过滤器,我可以在其中输入类似以下内容的内容:“a,c”并获取包含标签“a”和“c”的所有条目

    我尝试通过目标实体中的 "TagFilter.class""baseCondition="${tags} = ?" 来实现它,但没有可用的结果

    最佳答案

    Target 中的 Tags 属性与详细信息集合的标签值无关。 Target 中的 Tags 属性只是表中的一个新列。

    你必须选择:

    1. 使用@Formula定义标签属性
    2. 每次添加/删除详细信息时更新标签属性(您可以为此使用 JPA 回调方法)

    关于java - 如何在 OpenXava 的列表模式下过滤标签(/字符串的一部分)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210697/

    27 4 0