2012-03-14 2 views
0

Я пытаюсь передать URL статического ресурса через тег apex: param. Код, который я до сих пор: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; } 

Мое понимание апекса: парам было то, что я бы сейчас быть в состоянии назвать переменные контроллера после того, как произошла повторная реновация, и они будут заполнены 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» являются по отношению к вашей вершине тега формы --- получение рендера для правильной работы, как известно, сложно, и полностью зависит от иерархического положения элементов 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'), поэтому решение Джима здесь действительно довольно интересно, поскольку это избавляет его от необходимости выполнять SOQL-запрос объекта StaticResource в своем контроллере.

+0

Ницца, рад, что вы смогли заставить его работать. Кроме того, комментарий, направленный на мой ответ, должен быть комментарием моего ответа, а не в вашем ответе. –

+0

Спасибо, Мэтью. Я хотел прокомментировать ваш пост, но я не могу. Возможно, у меня должна быть более высокая репутация? – zachelrath

+0

Np, спасибо. –

0

{!URLFOR($Resource.NoImage)} не предназначен для использования в качестве переменной контроллера/расширения. Это прямая ссылка на статический ресурс (не требуется контроллер/расширение).

Я бы рекомендовал вам использовать выходные панели с отображаемым свойством, связанным с переменной Apex, которая управляется функцией действия. Таким образом, вы можете показывать или скрывать каждую версию изображения, отображая или скрывая панель вывода.

В качестве альтернативы, вы можете ознакомиться с использованием JavaScript Remoting для чего-то подобного.

Смежные вопросы