Я пытаюсь передать параметр из visualforce при загрузке страницы в контроллер, но он оказывается пустым. Что мне не хватает?

ВФП

<apex:page standardController="Contact" recordSetVar="record" extensions="Ya_ListToStringGeneric" action="{!returnIds}">
    <apex:pageMessages />
    <apex:form >   
        <apex:actionFunction name="flowname" action="{!returnIds}">
            <apex:param name="flowName" assignTo="{!flowName}" value="name" />
             <apex:param name="urlList" assignTo="{!urlList}" value="/003?fcf=00B240000000000" />
        </apex:actionFunction>
    </apex:form>
</apex:page>

Контроллер

   public class Ya_ListToStringGeneric{
    public string returnstringIDs {get;set;}   
    Public PageReference retURL;
    ApexPages.StandardSetController setCon;
    Public String urlList {get;set;}  
    Public string obj;
    Public String urlVal;
    Public String selectedIds;
    public String flowName {get;set;}
    public String flowName2 {get;set;} 

    public Ya_ListToStringGeneric(ApexPages.StandardSetController controller)
    {
        setCon = controller;
        system.debug(setCon);
        obj = setCon.getRecord().getSObjectType().getDescribe().getName();
    }
    public pageReference returnIds() {
        string flowName2 = Apexpages.currentPage().getparameters().get('flowName'); 
....
        retURL.setRedirect(true);
        return retURL;
    }
}
0
PartOfTheOhana 5 Июл 2019 в 02:20
apex:actionFunction, не правильный способ передать параметр. Что вы пытаетесь сделать здесь? Больше похоже на проблему XY
 – 
Raul
3 Июл 2019 в 17:27

1 ответ

Лучший ответ

Команда <apex:actionFunction> создает функцию JavaScript, которую вы можете вызвать, которая вызывает действие контроллера. Размещение элементов <apex:param> там не влияет на действие, вызываемое атрибутом action= вашей страницы.

Кроме того, не рекомендуется использовать атрибут action, так как он подвергает ваше приложение риску CRSF-атаки.

Единственный известный мне способ сделать то, что вы хотите, — это подход, который я описал в ответ некоторое время назад: вы кодируете значения параметров в названии самой страницы Visualforce. Здесь это может быть запутанно (и ограничено по длине), но, как минимум, похоже, что вы могли бы сделать это успешно с префиксом ключа целевого объекта sObject (или его именем API, а затем получить префикс ключа через описание) и имя целевого потока.

В качестве альтернативы назовите свои страницы Visualforce именем конфигурации и сохраните фактическую конфигурацию в записи пользовательских метаданных с тем же именем. Затем ваша страница Apex может самостоятельно просмотреть имя конфигурации со страницы, запросить метаданные конфигурации и таким образом получить ее параметры.

0
David Reed 3 Июл 2019 в 17:35