0

リストモードでOpenXavaのタグをフィルタリングしたい。


  1. したがって、 Tag ( with int id, String name and String description)という単純なエンティティがあります。

  2. タグ参照を保持し、次のように見える埋め込み 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();
    
}
  1. 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 エンティティで with を使用して実現しようとしましたが、使用可能な結果はありません"TagFilter.class"でした"baseCondition="${tags} = ?"

4

1 に答える 1