Как я могу отфильтровать теги (/ часть строки) в режиме списка в OpenXava? - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу выполнить фильтрацию по тегам в OpenXava, в режиме списка.


  1. Поэтому у меня есть простая сущность с именем Tag int id, String name and String description)

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

}
Мой «основной» объект, называемый 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"

, которые я пытался реализовать это "TagFilter.class" ш ith "baseCondition="${tags} = ?" в целевом объекте, без результата, который можно использовать

1 Ответ

0 голосов
/ 18 февраля 2020

Свойство tags в Target не имеет отношения к значениям тегов коллекции данных. Свойство tags в Target - это просто новый столбец в вашей таблице.

У вас есть варианты:

  1. Определение свойства тегов с помощью @ Formula
  2. Обновлять свойство тегов каждый раз, когда деталь добавляется / удаляется (вы можете использовать обратный вызов JPA методы для этого)
...