リストモードで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 エンティティで with を使用して実現しようとしましたが、使用可能な結果はありません"TagFilter.class"
でした"baseCondition="${tags} = ?"