- PR -

JSF にて動的に画像ファイルを変更させる方法

1
投稿者投稿内容
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-06-22 16:50
また皆様のお知恵を借りたく思います。

【環境】
OS:Windows 2000
Web サーバ:Tomcat 5.0
JDK:1.4
JSF:1.1

【やりたいこと】
画面に表示する画像ファイルを動的に変更させたい。

【やってみたこと】
Bean 側で相対パスを設定したフィールドを保持して、
JSP 側で
<h:graphicImage url="#{bena.file}"></h:graphicImage>
とやってみましたが表示されません。

file 自体には正常なパスが設定されて、その文字列を直接記入すれば
画像ファイルは表示されます。
例)
<h:graphicImage url="../img/aaa.png"></h:graphicImage>

ここのサイト
解決策っぽいものが書いてありますが、
結局「bean.imgPath」が何の型なのかが分かりませんでした。
( ちなみに、会社でアクセス制限がかかっていますのでこのリンクが正常かは確認出来ませんでした )

私の場合、「bean.file」は String 型で、画像ファイルへの相対パスが書かれています。
特殊な設定か何かが必要なのでしょうか?
それと、「url」を「value」にしても同じ現象が発生しました。

画像ファイルを動的に指定出来れば他の方法でも良いので、
ご教授頂ければ嬉しく思います。

宜しくお願い致します。


[ メッセージ編集済み 編集者: 小僧 編集日時 2007-06-22 16:51 ]
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-06-22 17:04
たぶんあまりよくない方法なのだろうと思いますが、
固定のURLのjspファイルを
コード:
<%
 byte[] data =
  ...
 response.setContentLength(data.length);
 response.setContentType(application.getMimeType(filename));
 response.getOutputStream().write(data);
%>


として、DBなどに格納したワード文書などのデータと元ファイル名から対応するファイルを表示させました。

KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-06-22 17:58
引用:

小僧さんの書き込み (2007-06-22 16:50) より:
<h:graphicImage url="#{bena.file}"></h:graphicImage>
とやってみましたが表示されません。

file 自体には正常なパスが設定されて、その文字列を直接記入すれば
画像ファイルは表示されます。
例)
<h:graphicImage url="../img/aaa.png"></h:graphicImage>


JSFはわかりませんが、本当に正常なpathが設定されているのでしょうか?
生成されたHTMLソースを確認してみてください。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-06-22 18:12
返信ありがとうございます。

だっちょサマ
つまり画像ファイルを Read-Write して表示する、という感じでしょうか?
中々強引ですね(w
他に手段が無いようでしたら実現したいと思います。

KOX サマ
> JSFはわかりませんが、本当に正常なpathが設定されているのでしょうか?
されてます。
ここには書きませんでしたが、同じ JSP に
<h:inputText value="#{bean.file}" />
という行を表示させました。
そこには想定されているパスが表示されました。
( つまり「../img/aaa.png」 )

宜しくお願い致します。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2007-06-26 15:58
こんにちは。
こちらでも試してみましたが、
コード:
<p/><h:graphicImage value="/images/photo.gif"/>
<p/><h:outputText value="image=#{mySampleBean.image}"/>
<p/><h:graphicImage url="#{mySampleBean.image}"/>


というコードで問題なく、写真が2枚とその間に「image=/images/photo.gif」という文字列が表示されました。

ちなみにmySampleBeanの実体はjava.util.HashMapでfaces-config.xmlの<map-entry>を使って/images/photo.gifを設定しました。

結果画面のソースhtmlを確認されてはどうでしょうか?
こちらの場合は以下のようになりました。
コード:
<p/><img src="/xxx/images/photo.gif" alt="" />
<p/>image=/images/photo.gif
<p/><img src="/xxx/images/photo.gif" alt="" />

小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-06-27 10:03
お世話になります。
返信ありがとうございます。

よしだひろゆきサマ
うーむ、上手く行きましたか。。。
ちなみに、こちらで HTML を表示させると、
対象の HTML タグが存在しません。
多分、値がないため JSF 的に表示をさせないように
している気がします。

頂いたコードを元にもう少しこちらで研究してみます。
情報、ありがとうございました。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2007-06-27 11:45
引用:

ちなみに、こちらで HTML を表示させると、
対象の HTML タグが存在しません。
多分、値がないため JSF 的に表示をさせないように
している気がします。


不思議ですねぇ。JSFにそのようなエラー処理(?)があるとは聞いたことがありません。

デバッガでRender Responseフェーズ直後に止めてみて、コンポーネントツリー内にHtmlGraphicImageコンポーネントが存在するかを見てみたらどうでしょうか?

以前に私が提示したPhaseListenerをお使いなら、ログを書くところにブレークポイントを設定して、UIViewRootから辿っていけばよいと思います。

HtmlGraphicImageコンポーネントが存在しなければ、そもそもJSPソースでタグ名を間違えているなどの可能性が高いと思います。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2007-06-27 11:56
返信ありがとうございます。

実は。。。
頂いたソースを元に書いてみたら出来ました!
faces-config の設定が必要だったのでしょうか???
( 再起動したから、かなぁ。。。 )

ちなみに、bean.file に値を設定しないと
WARN encodeEnd, Graphic with id _idJsp0:_idJsp1 has no value (url).
というログが表示されて HTML タグが出力されません。
個人的には、この段階でタグをはかない処理を JSF 側が行っているのでは?と
愚考しています。
( bean.file に値を入れると表示されるので、タグ間違いではないと思っています )

何はともあれ、お付き合いありがとうございました。 > よしだひろゆきサマ
また宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)