Visualforce передает статический URL ресурса в Apex - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь передать статический URL ресурса через тег apex: param.На данный момент у меня есть код:

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

Мое понимание apex: param заключалось в том, что теперь я смогвызовите переменные контроллера после повторного рендеринга, и они будут заполнены статическим URL ресурса.Но, к сожалению, я получаю нулевое значение.

У кого-нибудь есть идеи, почему он не работает?

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Это работает, если вы предоставляете имена для своих параметров --- 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, чтобы мы могли видеть, где «gallery» и «scriptPanel» по отношению к вашему тегу apex form. Получение повторного рендеринга для правильной работы, как известно, сложно и полностью зависит от иерархической позицииЭлементы DOM возвращаются.Чтобы гарантировать успешное повторное рендеринг gallery и scriptPanel, поместите их в отдельные выходные панели вне тега формы апекса, например:

<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 голосов
/ 15 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...