Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [JSF]@ViewScoped как пережить обновление страницы 
:(
    Опции темы
cuvorov
  Дата 4.7.2012, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Добрый день.
Есть JSF страница которая обслуживается @ViewScoped бином. На странице есть календарь на котором можно, выставить временной диапазон. Диапаазон хранится в бине в переменных типа Date. Если пользователь обновляет страницу через F5 значения календаря(переменные) сбрасываются на значения по умолчанию. Как сделать так что бы они переживали F5? SessionScope к сожалению не подходит.
PM MAIL   Вверх
Vasay
Дата 5.7.2012, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



cuvorov

Сохранить даты в url

Это сообщение отредактировал(а) Vasay - 5.7.2012, 01:47


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
korian
Дата 13.7.2012, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 1
Всего: 17



А никак.
При рендеринге странице есть скрытое поле ViewState. И пока это поле присутствует в запросе, JSF понимает, с каким @ViewScoped бином связать запрос.
Если оно отсутствует, то JSF создает новый ViewScoped бин и новый ViewState.
Поэтому тут только или SessionScope, или ConversationScope из CDI может подойти... и не без проблем smile


Это сообщение отредактировал(а) korian - 13.7.2012, 13:36
PM   Вверх
Vasay
Дата 13.7.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



korian

Цитата

При рендеринге странице есть скрытое поле ViewState.


Не обязательно на странице. ViewState может сохраняться на сервере:

web.xml
Код

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>



Цитата

А никак.


Наверно, при желании все же можно засунуть даты в URL. Конечно, это будет некий "костыль". Для GWT я такие "костыли" видел, когда состояния компонентов сохраняется в URL.




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
korian
Дата 15.7.2012, 01:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 1
Всего: 17



Цитата(Vasay @  13.7.2012,  13:45 Найти цитируемый пост)
Не обязательно на странице. ViewState может сохраняться на сервере:

На сколько я понимаю ViewState сохраняется всегда, при наличае формы и необходимости. Необходимость в данном случае - это существование ViewScoped бина. Разница лишь в виде, в котором он сохраняется.

Вот пример:
Код

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class TestClass implements Serializable {
    private String test = "test";
    public String getTest() {
        return test;
    }
    public void setTest(String test) {
        this.test = test;
    }
}


Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

    <h:form>
        <h:outputText value="#{testClass.test}" />
    </h:form>
</html>


Резултат 1:
Код

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>


Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <form id="j_idt3" name="j_idt3" method="post" action="/deployment-portal/faces/index.xhtml"
        enctype="application/x-www-form-urlencoded">
        <input type="hidden" name="j_idt3" value="j_idt3" />
        test
        <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState"
            value="4560357671165955156:1497501622082737167" autocomplete="off" />
    </form>
</html>


Результат 2:
Код

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>


Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <form id="j_idt3" name="j_idt3" method="post" action="/deployment-portal/faces/index.xhtml"
        enctype="application/x-www-form-urlencoded">
        <input type="hidden" name="j_idt3" value="j_idt3" />
        test
        <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState"
            value="H4sIAAAAAAAAAG1ST2sUMRR/O91VdxGpFXqyt1L0kqHnRbRUSxemKo6K4kFfZ+JulkwSkze72R4KngURPAm
KX8Cbn0B6EAQFPfod/AyaTFe6oA8mZMj7/Xn55cMv6Bhn4fwYJ8hqEpLtohvtoemc
/vnpaPXJ9yVIdqAnNZY7WJC2A+jSyHI30rL05uo1iHV2eiasy+FLCC4WumKuVuwpFtyx6zOFlSi2ChJauaB14URry1qcZcKRf
/5j7c1nfLcErQG0nTjg3kTiaTuunqAzfizKzTqgH2UNXqIaslv7Y15Q/9W3B++X3WWZhNYIS+JIG7HNz00ES0YrrojlhMR3g3luc5xw+
/DLxyuv337dSyDJoFtIdO4mVpxgpdFJo06akxVq2M+g5wKmbDgIVo87hE5zbgVKcYD7kve9ifKX/i9/b3Bf8OkdrWk9bsJF
/55XAq0MOo5wGKg3GmqfNvAUjZGiwHiB6W2r48x57Ov7Z3AI8E8ILQohcUfbcZrgJY2J8ImWE1ZyI/WsClaMtoQyWFNktZTcsrt
/IS/Sl2ubp8xRY6kdmaJO1xs6/vOHFtYX51swyBYNwrxWQjAWzp0Ed0PV1eJhYO4FYFk3r8T/AYUagB2XAgAA"
            autocomplete="off" />
    </form>
</html>


Это сообщение отредактировал(а) korian - 15.7.2012, 01:22
PM   Вверх
Vasay
Дата 15.7.2012, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



korian

Да, Вы правы.  В случае с "server" он пишет в поле "javax.faces.ViewState" некий id по которому связывает данные сохраненные на сервере с конкретной формой для конкретного запроса. 

Суть не меняется - при обновлении страницы теряем этот id, соответственно теряем ViewScoped бин.

Ну тогда только как-то положить данные в URL. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.