Переменные сеанса Salesforce, установка и получение переменных в сеансе - PullRequest
5 голосов
/ 09 февраля 2011

Я хочу иметь возможность читать / записывать некоторые переменные в текущий сеанс на страницах моего сайта Salesforce.

У меня есть сайт, созданный с использованием Salesforce Sites, мне нужно хранить / получать некоторые значения на всех страницах (учтите, что я создаю что-то похожее на корзину покупок). Однако я не могу найти хороший пример того, как читать и записывать переменные в сеанс (анонимный пользователь).

Я использую страницы Visualforce с несколькими контроллерами, встроенными в Apex.

Привет

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011

Если вы создаете что-то вроде корзины для покупок или «мастера», в котором вам нужно хранить переменные контроллера в контексте от одного просмотра страницы к другому, то лучший способ сделать это в VisualForce - это использовать тот же контроллер.

Когда пользователь отправляет форму (через actionFunctions, commandButtons или commandLinks и т. Д.), И ваш контроллер возвращает ссылку на страницу, состояние просмотра сохраняется, если новая страница визуальной силы использует тот же контроллер.

Таким образом, вы можете, например, попросить пользователя ввести свое имя и адрес электронной почты с помощью тегов apex: inputField на первой странице. Они переходят ко второй странице, которая использует тот же контроллер, что и первая страница, и страница может ссылаться на те же переменные контроллера. По сути, контроллер все еще находится в области действия, как и все переменные, которые были обновлениями.

Пример:

Страница первая:

<apex:page controller="myController">
   Please enter your name <apex:inputText value="{!shopper_name}"/>
   <br/>
   <apex:commandButton action="{!pageTwo}" value="Click for page two"/>
</apex:page>

Страница вторая:

<apex:page controller="myController">
   You entered: <apex:outputText value="{!shopper_name}" />.
</apex:page>

Контроллер:

public class myController {
  public string shopper_name { get; set; }
  public myController() {
    shopper_name = null;
  }
}
3 голосов
/ 10 февраля 2011

Пользовательские настройки кэшируются на уровне приложения, возможно, именно поэтому это было предложено в ссылке выше.Я не уверен, рекомендую ли я такой подход, но вы могли бы заставить его работать.

Если вы создадите пользовательский параметр с именем «SessionData» и добавите свои пользовательские поля (которые представляют данные, которые вы хотите сохранить в сеансе), вы можете сохранить данные в нем следующим образом:

Database.SaveResult result = Database.insert(new SessionData__c(YourFieldHere='Your value here etc'));
System.debug(result.getID());

Затем используйте полученный идентификатор пользовательской настройки для сохранения в файле cookie.Хотя к пользовательским настройкам можно обращаться с помощью обычного SOQL, преимущество заключается в том, что данные кэшируются и доступны следующим образом:

if (SessionData__c.getAll().containsKey('unique ID from cookie here'))
{
     System.debug(SessionData__c.getInstance('unique ID from cookie here').YourFieldHere);
}

Имейте в виду, что пользовательские настройки на самом деле не были предназначены для этого, поэтому выПотребуется периодически очищать старые данные пользовательских настроек, как это делают обычные системы управления сеансами.

Подробнее см. в документации Apex Custom Settings .

0 голосов
/ 11 февраля 2011

Вы должны использовать Javascript cookies для этого.

Вы также можете использовать куки Apex , но тогда вам необходимо убедиться, что каждый запрос попадает на сервер (а не на уровень кэширования).

для ApexCookie вы можете использовать следующий код:

//Setting Cookie
public void setCookie() {
    Cookie userCookie = new Cookie('CookieName', fieldValueToBeStoredAsCookie, null, 315569260, false); //Here 315569260 represents cookie expiry date = 10 years. You can set this to what ever expiry date you want. Read apex docs for more details.
    ApexPages.currentPage().setCookies(new Cookie[] {
        userCookie
    });
}

//Reading Cookie 
Cookie cookie = ApexPages.currentPage().getCookies().get('CookieName');
if (cookie != null) {
    String fieldValueToBeStoredAsCookie = cookie.getValue();        
}
0 голосов
/ 11 февраля 2011

Я думаю Visualforce View State может быть полезно для вас:

Страницы Visualforce, содержащие компонент формы, также содержат зашифрованное скрытое поле формы, которое инкапсулирует состояние просмотра страницы. Это состояние просмотра создается автоматически, и, как следует из его названия, оно содержит состояние состояния страницы, которое включает компоненты, значения полей и состояние контроллера.

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