2012-03-14 33 views
0

apex:paramタグを使用して静的リソースURLを渡そうとしています。私がこれまで持っているコードは次のとおりです。Visualforceが静的リソースURLをApexに渡します

のVisualforce:

<apex:selectList value="{!SelectedFamily}" onchange="renderGallery();" size="1" label="Product Family"> 
    <apex:actionFunction name="renderGallery" rerender="gallery" oncomplete="renderScripts();"> 
     <apex:param value="{!URLFOR($Resource.NoImage)}" assignTo="{!noImage}"/> 
     <apex:param value="{!URLFOR($Resource.NoImageThumb)}" assignTo="{!noImageThumb}"/> 
    </apex:actionFunction> 
    <apex:actionFunction name="renderScripts" rerender="scriptPanel"> 
    </apex:actionFunction> 
    <apex:selectOptions value="{!Family}" /> 
</apex:selectList> 

コントローラー:

public string noImage{ get; set; }; 
public string noImageThumb { get; set; } 

頂点の私の理解:paramは私が今後のコントローラ変数を呼び出すことができるだろうということでした再レンダリングが発生し、静的リソースURLが入力されます。しかし、残念ながら私はnullを得続けます。

なぜ動作していないのですか?

答えて

3

これは、あなたのパラメータの名前を提供する場合に機能します。名前が付けられていない限り、Visualforceはこのコンテキストでparamsを処理しません。

<apex:actionFunction name="renderGallery" rerender="gallery" oncomplete="renderScripts();"> 
     <apex:param name="noImg" value="{!URLFOR($Resource.NoImage)}" assignTo="{!noImage}"/> 
     <apex:param name="noImgUrl" value="{!URLFOR($Resource.NoImageThumb)}" assignTo="{!noImageThumb}"/> 
</apex:actionFunction> 

これはすぐにあなたのために動作しない場合は、「ギャラリー」と「scriptPanelは」あなたの頂点formタグに関連しているところ、私たちが見ることができるように、あなたのVisualforceコードの残りの部分を投稿してください--- rerenderが正しく動作するようにすることは、非常に難しいことであり、DOM要素が再レンダリングされる階層的な位置に完全に依存しています。そのギャラリーやscriptPanelが正常に再レンダリングを保証するために、頂点formタグの外に別のoutputPanelsに入れ、次のように:

<apex:outputPanel id="scriptPanel"> 
    Selected Family: {!SelectedFamily}<br/> 
</apex:outputPanel><br/><br/> 


<apex:outputPanel id="gallery"> 
    No Image: {!noImage}<br/> 
    No Image Thumb: {!noImageThumb}<br/> 
</apex:outputPanel><br/><br/> 

@MatthewKeefe、{!URLFORは()}として使用できない理由は絶対にありません拡張変数---テキスト(例えば '/ resource/123718923')にコンパイルするので、彼のコントローラのStaticResourceオブジェクトに対するSOQLクエリを実行する必要がなくなります。

+0

うれしいことに、うまくいきました。また、私の答えに向けられたコメントは、あなたの答えではなく、私の答えに対するコメントでなければなりません。 –

+0

Matthewに感謝---あなたの投稿にコメントしたかったが、できなかった。多分、私はより高い評判を持たなければならないでしょうか? – zachelrath

+0

Np、ありがとう。 –

0

{!URLFOR($Resource.NoImage)}は、コントローラ/拡張変数として使用するためのものではありません。これは静的リソースへの直接の参照です(コントローラ/拡張機能は必要ありません)。

レンダリングされたプロパティがアクション関数によって制御されるApex変数にバインドされた出力パネルを使用することをお勧めします。こうすることで、出力パネルを表示または非表示にして、イメージの各バージョンを表示または非表示にすることができます。

また、JavaScript Remotingのようなものを探してみることもできます。

関連する問題