function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
kthirokthiro 

Imageコンポーネントを利用した画像の動的表示について


VisualforceページとAPEXにて、画像を動的に切り替えるサイトを作成しています。
簡単にまとめますと以下の動作を実現しようとしています。

<想定している動作>
1.事前に静的リソースに画像となるJPEGファイルをアップロード
2.アップロードしたJPEGファイル名をオブジェクトに格納
3.コントローラの読み込み時にオブジェクトから画像名を取り出し、VisualForceページで表示。

※現在のところ外部のWebサーバにアップして、
直リンク指定で表示させる方法はなしとしています。


<疑問点>
上記3.でAPEXから渡されたオブジェクト名をimageコンポーネントに渡しても
コンパイルは通るのですが画像が表示されません。
(よくある画像リンクエラーと同じように□の中に赤い×がついたものが表示されてしまいます)


拙いですがソースも記載させて頂きます。
何か特別な指定方法があるのか、あるいは、imageコンポーネント以外のものがあるのか
ご存じの方がいたらご指摘頂ければ大変助かります。
(参考URL等でも結構です)

 

[Visualforceページのソース]
<apex:page controller="ImageTestController" showHeader="false" sidebar="false" >
<div style="text-align:center;">
    <apex:image url="{!$Resource.testimage}"></apex:image> <!-- この指定は表示OK  -->
    <apex:image url="{!Image1}"></apex:image> <!-- この指定はNG  -->
    <apex:image url="{!Image2}"></apex:image> <!-- この指定はNG  -->
</div>
</apex:page>

 

[Apexのソース]
とりあえず現在はテストとして、定数のString型を直接返却しています。

 

public class ImageTestController {
    public ImageTestController (){
   
    }

    public String getImage2() {
        return '$Resource.testimage';
    }

    public String getImage1() {
        return 'testimage';
    }
}

以上です。

ikouikou

静的リソースにzipとかでまとめて保存する方法でどうでしょうか。

 

こんな形で1ファイルとして保存しておく。

 ImageZip/image1.jpg

 ImageZip/image2.jpg

 

サンプル

 

<apexage controller="ImageTestController" showHeader="false" sidebar="false" >
<div style="text-align:center;">
    <apex:image url="{!URLFOR($Resource.ImageZip, Image1)}"></apex:image>
    <apex:image url="{!URLFOR($Resource.ImageZip, Image2)}"></apex:image>
</div>
</apexage>

 

 

public class ImageTestController {

    public String getImage1() {
        return 'ImageZip/image1.jpg';
    }
    public String getImage2() {
        return 'ImageZip/image2.jpg';
    }
}

 

 

$Resource.xxxxはコンパイル(page保存)時に解釈されるから、前のやり方だとうまくいかないのでは。

とりあえず$Resource.ImageZipとかでフォルダまでは指定しておいて、ページ表示時に動的にフォルダ内の画像ファイルへの

パスを持ってくるようにすればいけると思います。

 

kthirokthiro

ikou さん

 

ご助言ありがとうございました。
ikouさんのサンプルソースを元に作成したところ
無事に想定している動作を実現できました。

$Resource.ImageZip のImageZip部分は固定となってしまいますが、
そこは運用でカバーしようと考えています。

 

<参考URL>
今回の調査で別途参考にしたHPです。
http://knowledge.sorich.jp/?SalesForce.com%2FVisualForce%2FApex%E3%82%BF%E3%82%B0%2Fstylesheet


ありがとうございました。