[Wicket-ja-user 261] Re: MultipleChoiceコンポーネントでモデルにCollectionを使わずStringを使いたい

Back to archive index

Tsutomu Yano benbr****@mac*****
2008年 12月 8日 (月) 02:54:37 JST


こんばんは。

次のようなIModel実装を使って、CheckBoxMultipleChoiceのモデルとしてPropertyModelの代わりに使うと
うまくいきました。

PropertyModel<Collection<String>>を継承して、値がセットされるときに別に用意した内部の
PropertyModel<String>にもカンマ区切りの文字列をセットするようにしただけですね。

コンストラクタの引数でプロパティ式をふたつ渡します。ひとつはコレクションのプロパティ、
もう一つはカンマ区切りの文字列が格納されるプロパティになります。

カンマ区切り値が欲しいときは、格納先のプロパティから取り出せばよいです。

public static class CommaSeparatateStringModel extends PropertyModel<Collection<String>> {

	PropertyModel<String> stringModel;

	public CommaSeparatateStringModel(Object modelObject, String expression, String stringExpression) {
		super(modelObject, expression);
		stringModel = new PropertyModel<String>(modelObject, stringExpression);
	}

	@Override
	public void setObject(Collection<String> object) {
		if(object == null) {
			stringModel.setObject("");
		} else {
			stringModel.setObject(StringUtils.join(object, ","));
		}

		super.setObject(object);
	}

	@Override
	public void detach() {
		stringModel.detach();
		super.detach();
	}
}


もしすでに文字列用のモデルが用意されていて再利用したいなら、stringModelの部分を、準備済みの
モデルで置き換えてやればうまくいくと思います。

お試しくださいな。


On 2008/12/06, at 15:04, Susumu ISHIGAMI wrote:

> いつもお世話になっています。
> 石上です。
>
> CheckBoxMultipleChoice、ListMultipleChoiceなどの
> 複数選択系のコンポーネントについて悩んでいます。
>
> これらは、モデルに、Collectionを格納することを要求します。
> もしStringオブジェクトを入れると、
> 下記のような例外が発生してしまいます。
>
> WicketMessage: Model object for a ListMultipleChoice must be a
> Collection (found class java.lang.String)Root cause:
> org.apache.wicket.WicketRuntimeException: Model object for a
> ListMultipleChoice must be a Collection (found class java.lang.String)
>    at org.apache.wicket.markup.html.form.ListMultipleChoice.getModelValue(ListMultipleChoice.java:190)
>
> 気持ちはわかりますが、
> こちらとしては、諸事情により、カンマ区切り文字列で読み書きしてもらえると一番助かります。
>
> 私はモデルの上にモデルをラップして、内部モデルのStringをCollectionに見せかけようとして、、、失敗しました。(汗
> う〜ん、Converterを使えばいいのでしょうか?
>
> もしかしたら同じ悩みを抱えている方がいらっしゃるかもしれないので、
> 質問させていただくことにしました。
>
> よろしくお願いします。
>
> _______________________________________________
> Wicket-ja-user mailing list
> Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user

---------------------------------------------------
矢野 勉(やの つとむ)
電子メール:benbrand_at_mac.com
---------------------------------------------------



Wicket-ja-user メーリングリストの案内
Back to archive index