2012-03-14 25 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。但不幸的是我一直收到空。

任何人都知道为什么它不工作?

回答

3

它适用于您为参数提供名称的情况--- Visualforce不会在此上下文中处理参数,除非它们已被命名。

<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> 

如果这个不适合你工作的时候了,请发表您的Visualforce代码的其余部分,使我们能看到“画廊”和“scriptPanel”是相对于你的顶点表单标签---让rerender正确工作是非常棘手的,并且完全依赖于DOM元素被重新分级的层次位置。为了保证画廊和scriptPanel成功地重新呈现,把它们放在不同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'),所以Jim的解决方案实际上非常有趣,因为它使他不必在控制器的StaticResource对象上执行SOQL查询。

+0

不错,很高兴你能够得到它的工作。另外,针对我的回答的评论应该是对我的回答的评论,而不是你的回答。 – 2012-03-15 14:45:46

+0

感谢马修---我想评论你的帖子,但我不能。也许我必须要有更高的声誉? – zachelrath 2012-03-15 14:50:36

+0

Np,谢谢。 – 2012-03-15 15:03:35

0

{!URLFOR($Resource.NoImage)}并不意味着被用作控制器/扩展变量。它是对静态资源的直接引用(不需要控制器/扩展)。

我会建议您使用输出面板,将渲染属性绑定到由动作函数控制的Apex变量。这样,您可以通过显示或隐藏输出面板来显示或隐藏每个版本的图像。

另外,你可能想看看使用JavaScript Remoting这样的事情。

相关问题