2

ラベルのモデルが列挙値である改札パネルにラベルを追加したいと思います。その列挙型の値に基づいて、ページのプロパティ ファイルから取得した別のメッセージを表示したいと思います。

たとえば、列挙型は次のとおりです。

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };

この列挙型をモデルとして持つラベルをパネルに簡単に追加できます。

add(new Label("approval", new Model(ApprovalType.APPROVED)));

ただし、これは単純に UNAPPROVED、APPROVED、または BLOCKED を出力します。この列挙型の値に基づいて選択されたローカライズされたメッセージを出力したいと思います。

このプロパティ ファイルがある場合、これらのメッセージを出力する最善の方法は何ですか?

UNAPPROVED=Your membership is currently pending approval
APPROVED=Your membership has been approved
BLOCKED=You have been blocked from membership

次のように動作させることができます:

add(new Label("approval", new ResourceModel(ApprovalType.APPROVED.name());

しかし問題は、ResourceModel が文字列 (リソース キー) のみを受け入れることです。リソース キーの値をモデル (できれば CompoundPropertyModel) から自動的に取得したいと考えています。言い換えれば、私はこれをしたくありません:

Member member = (Member) getDefaultModelObject();
add(new Label("approval", new ResourceModel(member.getApproval().name())));

私はむしろ次のようなことをしたい:

add(new EnumLabel("approval");  // assuming I have a CompoundPropertyModel

これを行うコンポーネントは Wicket に付属していますか? それとも自分で書く必要がありますか?

最後に、これも機能することを発見しました:

add(new Label("approval", new StringResourceModel(
    "${}", 
    new PropertyModel<ApprovalType>(getDefaultModel(),"approval")
)));

しかし、これは非常に冗長に思えますが、CompoundPropertyModel を使用する単純さをまだ利用していません。

アイデア?

4

1 に答える 1

4

これが機能するかどうかはわかりませんが、Enum の値を取り、ResourceModel 値を返す独自の EnumModel クラスを作成してみてください。

上記で十分に明確でない場合は、詳しく説明します。

于 2010-02-05T11:58:19.503 に答える