Visualforce передает значение переменной Javascript в контроллер

Я работаю над страницей Visualforce, содержащей некоторый javascript. Страница имеет расширение контроллера. В течение последних нескольких дней я исследовал, как передать значение переменной javascript на моей странице VF в контроллер Apex, где мне нужно использовать это значение для выполнения некоторых действий. Ничто из того, что я пробовал, не работает, хотя я видел несколько подобных примеров кода, который должен делать то, что я пытаюсь сделать. Пожалуйста, помогите, потому что я схожу с ума.

У меня есть переменная javascript на моей странице visualforce, которая называется inLightning. Когда загружается страница VF, inLightning = true или false в зависимости от того, находится ли текущий пользователь в пользовательском интерфейсе Lightning или в классическом пользовательском интерфейсе. На странице VF есть другой javascript, который возвращает это значение и заполняет мою переменную inLightning. Я знаю, что эта часть работает. Мне нужно сообщить моему контроллеру Apex, находится ли текущий пользователь в Lightning или Classic, поэтому я пытаюсь передать значение inLightning моему контроллеру следующим образом:

У меня есть такая функция javascript, где я передаю значение моей переменной inLightning. К моменту вызова этой функции переменная уже имеет значение true или false.

        function getValue(inLightning)
        {
            passValue(inLightning);
        }

Теперь на моей странице визуальной силы я использую apex:actionFunction с apex:param, чтобы передать это моему контроллеру следующим образом:

        <apex:form>
            <apex:actionFunction name="passValue" action="{!UIValue}" immediate="true">
               <apex:param> id="LightningParam" name="LightningParam" value="" />
           </apex:actionFunction>
      </apex:form>

В моем расширении контроллера я включил небольшой метод с именем UIValue, например:

     public void UIValue()
     {  
             String value = ApexPages.currentPage().getParameters().get('LightningParam');
             system.debug('string value is '+value);


      }

Всякий раз, когда я загружаю страницу visualforce, функция действия не работает, и метод контроллера UIValue не работает. Когда страница загружается, и я просматриваю свой журнал отладки, моего оператора system.debug выше нет в моем журнале. По-видимому, мой метод UIValue не работает.

Я не знаю, что делать дальше. Я не хочу делать событие щелчка или что-то в этом роде, чтобы это сработало. Когда загружается страница visualforce, я хочу запустить код, который передаст значение моей переменной javascript inLightning моему контроллеру. Любые предложения приветствуются.


person joaniej    schedule 28.03.2018    source источник


Ответы (1)


<apex:param> id="LightningParam" name="LightningParam" value="" />

Эта строка должна дать вам ошибку. Попробуйте использовать

<apex:param id="LightningParam" name="LightningParam" value="" />

вместо.

person Noor A Shuvo    schedule 29.03.2018
comment
Мое самое простое решение оказалось НЕ попыткой передать значение параметра Lightning в расширение моего контроллера. Вместо этого я добавил в расширение своего контроллера следующий метод: UserInfo.getUIThemeDisplayed(). Он возвращает тему пользовательского интерфейса, в которой в данный момент находится пользователь. Если этот метод возвращает Theme4d, пользователь находится в пользовательском интерфейсе Lightning. - person joaniej; 04.05.2018