実装

コンテキスト内

公開ディレクトリに配置しているコンテキスト内の静的ファイルならば、src属性に画像の相対パス(またはURL)を指定したほうが無駄な処理がない。

item.add(
  new WebMarkupContainer("hoge")
  .add(new SimpleAttributeModifier("src", "moge.jpg"))
);

URLでアクセスできる画像ならば、そのURLを指定することで表示させることができる(src属性値を書くのと同じだから。)

コンテキスト外

非公開ディレクトに配置した画像をアプリケーションを介して表示させるたいとき、Imageコンポーネントにバイナリを読み込んで渡してあげる。

final String imagePath = <ファイルパス>;
Resource image = new DynamicImageResource() {
  @Override
  protected byte[] getImageData() {
    // imagePathから画像のバイト列を取得する
    return <画像のバイト列>;
  }
};
item.add(new Image("hoge", image));

注意しなければならないのは、アプリケーションがgetImageData()をコールするのはブラウザが画像を取得するときだということ。つまり、ページをレンダリングした後、になる。リソースのファイルパスをLoadableDetachableModelに保持していると、アプリケーションはファイルパスを取得できなくなる。

参照

Last-modified: 2013-08-17 (土) 18:07:15 (2227d)