shinya okino
shiny****@gmail*****
2008年 8月 7日 (木) 20:36:03 JST
沖野です。 静的っぽいURLでDynamicImageResourceを返せれば良いのでしたら 手間ですけど以下のような方法があります。 まず、respondメソッドでDynamicImageResource#onResourceRequestedを 実行するIRequestTargetインターフェースを実装したクラスを作成します。 public class ImageRequestTarget implements IRequestTarget { /** パラメータ */ private String param; public ImageRequestTarget(String param) { this.param = param; } @Override public void respond(RequestCycle requestCycle) { DynamicImageResource imageResource = //パラメータからDynamicImageResourceを作成 imageResource.onResourceRequested(); } @Override public void detach(RequestCycle requestCycle) { } public String getParam() { return param; } } 次にそのIRequestTarget実装クラスを返すdecodeメソッドを実装したAbstractRequestTargetUrlCodingStrategyを 継承したクラスを作成します。 public class ImageUrlCodingStrategy extends AbstractRequestTargetUrlCodingStrategy { public ImageUrlCodingStrategy(String path) { super(path); } @Override public IRequestTarget decode(RequestParameters requestParameters) { //パラメータ取り出し String param = Strings.afterLast(requestParameters.getPath(), '/'); return new ImageRequestTarget(param); } @Override public CharSequence encode(IRequestTarget requestTarget) { //URL作成 ImageRequestTarget target = (ImageRequestTarget) requestTarget; StringBuilder builder = new StringBuilder(); builder.append(getMountPath()); builder.append("/" + target.getParam()); return builder.toString(); } @Override public boolean matches(IRequestTarget requestTarget) { return requestTarget instanceof ImageRequestTarget; } } そのAbstractRequestTargetUrlCodingStrategy継承クラスをWebApplicationでマウントします。 public class ImageApplication extends WebApplication { @Override protected void init() { super.init(); mount(new ImageUrlCodingStrategy("/image")); } } あとはWebPageクラスのurlForでurl生成できます。 public class ImagePage extends WebPage { public ImagePage() { Link link = ... add(link); ImageRequestTarget target = new ImageRequestTarget("hoge.jpg"); String url = urlFor(target).toString(); ContextImage image = new ContextImage("DYNAMIC_IMAGE", new Model(url)); link.add(image); } } 上記だとimage/hoge.jpgというurlが出力されます。 なんらかのパラメータからDynamicImageResourceが作成できるなら IRequestTargetとIRequestTargetUrlCodingStrategyの組み合わせで自由なurlが作成できます。 もっと簡単な方法がありそうな気もしますが、いかがでしょうか。 もしやりたいことを勘違いしていたらすいません。 08/08/07 に tj_takehana<tgens****@gmail*****> さんは書きました: > 竹花です。 > > ブログパーツをWicketで作ってみようとしているのですが、 > 「直接アクセスできる静的なURLの画像」の生成は可能でしょうか? > > FRAMEタグが不可なページのブログパーツなので、以下のようなものを作りたいと思っています。 > 例としては「あわせて読みたい」のようなものをイメージしていただければ、と思います。 > <div> > <a href="WICKET_PAGE"> > <image src="DYNAMIC_IMAGE"> > </a> > </div> > > ブログパーツクリック後の遷移先(WICKET_PAGE)はWicketのNice > URLの機能を使えば問題ないのですが、動的に生成される画像へのリンク(DYNAMIC_IMAGE)を作る方法が思い浮かびません。 > > DynamicImageResourceで生成した画像をSharedResourcesに追加する方法では、確かに静的なリンクの画像は作れますが、どうしても第一条件がページへのアクセスになってしまいますし(FRAMEタグが使えればコレでもいいのですが…)。 > 都合によりDBは使えないので「定期的にDBに保存しておいて表示」というわけにもいかないです。 > > どなたか良い解法をご存知の方がいましたらご教授おねがいいたします。 > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > -- 沖野信也 shiny****@gmail*****