Получение данных Cookie

Получение данных Cookie

Всем Здрасте!
Я новый участник сего замечательного сообщества. И у меня сразу же возник вопрос.

Есть два чекбокса: RichArea и TextArea.
При нажатии на них значение передается в тестовое поле и задает аттрибут richText, в значение true или false. от чего зависит вид этого поля.

<apex:pageBlockSection columns="1">

<apex:pageBlockSectionItem >
<apex:outputLabel value="Label"/>
<apex:outputPanel >
<apex:selectRadio value="{!TextArea}">
<apex:selectOption itemValue="true" itemLabel="RichArea"/>
<apex:selectOption itemValue="false" itemLabel="PlainArea"/>
<apex:actionSupport event="onchange"/>
</apex:selectRadio>
<apex:inputTextarea value="{Поле с текстом}" richText="{!TextArea}""/>
</apex:outputPanel>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>

Передо мной лежит следующая задача:
Сделать так, чтобы значение {!TextArea} сохранялось и бралось из cookie.

Мои мысли по этому поводу:
с помощью javascript создавать cookie, а в контроллере принимать уже примерно как написано в руководстве.

public String getCount() {

Cookie counter = ApexPages.currentPage().getCookies().get('counter');
if(counter == null) {
return '0';
}
return counter.getValue();
}

В правильном ли направлении я мыслю, и очень бы хотелось узнать мнение опытных товарищей по реализации данной задачи.

Да, абсолютно верно ты мыслишь!
Устанавливаешь куки при выборе чекбокса - можно через Javascript, можно через action метод в контроллере если нужно еще что-то изменять на стороне salesforce. (здесь про это написано Cookie Class).
Выбрать можешь любой способ, но тут надо определиться как ты будешь перерисовывать страницу (скрывать/показывать RichText/PlainArea) - с помощью javascript или с помощью rerender.

На счет принимать, то все правильно. В контроллере принят куку, проинициализировал переменную и в Visualforce показал либо richText либо plainText.

добавлю:

с помощью контроллера - это больше salesforce style, поэтому проще и надежнее.

с помощью javascript - быстрее работает (нет лишнего ajax запроса к контроллеру), но и делать сложнее :)

Я пошел по пути наименьшего сопротивления и выполнил задачу средствами Salesforce.

В контроллере я прописал следующее:

public string TextArea{get{

if(TextArea==NULL){
Cookie richText = ApexPages.currentPage().getCookies().get('richText');
if(richText==NULL){TextArea='true';}
else if(richText!=NULL){TextArea=richText.getValue();}
}
return TextArea;}set;}

public Void returnTrueFalseRichText() {
Cookie richText;
if (TextArea == 'true') {
richText = new Cookie('richText','true',null,-1,false);
}
if (TextArea == 'false') {
richText = new Cookie('richText','false',null,-1,false);
}

ApexPages.currentPage().setCookies(new Cookie[]{richText});
}

На странице добавил лишь:

<apex:actionSupport event="onchange" action="{!returnTrueFalseRichText}"/>

Все работает. Дмитрий, а вам большое спасибо. Буду рад замечаниям и пожеланиям по коду.

<apex:actionSupport event="onchange" action="{!returnTrueFalseRichText}"/>

Я бы добавил сюда еще rerender, чтобы не всю страницу перегружать, а только ее часть с textarea.

Тут такая особенность,при использовании rerender с Rich Area на Plain Area переключается без проблем, а вот обратно не как, ошибка и все тут. Я по разному пробовал и аяксом. И два разных поля создавал и css один скрывал, другой открывал та же история, ошибка .
А вот при полной перезагрузке страницы все нормально.

вот текст ошибки:

Rerender is not currently supported with rich text editing enabled

Млин, точно. По ходу есть такая проблема. Я не слышал про нее :).
Спасибо за информацию.

Вот что нагуглил на предмет твоей ошибки
http://andrewbcummings.wordpress.com/2013/07/19/salesforce-richtext-fail-rerender-is-not-currently-supported-with-rich-text-editing-enabled/

По ходу после rerender надо запускать инициализацию для richText area, которую Salesforce делать не хочет и просто возвращает ошибку.

Ну по ходу слухи о том, что RichText от Salesforce это зло и лучше сразу использовать сторонние решения на JS, правда
Stanislav, получается твое решение с перезагрузкой страницы правильный рабочий вариант :). И кода получилось минимум :)

Спасибо Дмитрий за ваши советы. Начали с одной темы, заодно и решение другой проблемы обсудили. Если нужно будет сделать без перезагрузки всей страницы, значит буду использовать javascript.

Interesting information? Help us, post link to social media..