Что такое viewstate в JSF и как он используется? - PullRequest
26 голосов
/ 26 мая 2010

В JSF существует состояние просмотра, связанное с каждой страницей, которое передается назад и вперед с отправками и т. Д.

Я знаю, что viewstate рассчитывается с использованием состояний различных элементов управления на странице, и вы можете хранить его на стороне клиента или на стороне сервера.

Вопрос: как используется это значение? Используется ли он для проверки значений, отправленных при отправке, чтобы гарантировать, что один и тот же запрос не будет отправлен дважды?

Кроме того, как это рассчитывается - я понимаю, что richfaces может быть рассчитан не так, как мои, но идея была бы неплохой.

Спасибо.

Ответы [ 2 ]

25 голосов
/ 26 мая 2010

Вопрос в том, как это значение используемый? Используется ли для проверки значения, отправленные при отправке, чтобы гарантировать, что один и тот же запрос не отправляется дважды?

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

AFAIK, состояние просмотра не используется для обнаружения двойной отправки, но это возможно, если вы прикрепите временную метку или что-то подобное.

Состояние просмотра также можно зашифровать, чтобы клиент не изменил его.

Кроме того, как это рассчитывается - я понимаю, что richfaces могут быть рассчитаны в отличие от моих лиц, но идея было бы хорошо.

Каждый компонент отвечает за сохранение своего состояния с помощью saveState и restoreState (см. Этот учебник ). Таким образом, разные наборы компонентов приводят к разному состоянию представления. Точно так же разные реализации JSF могут привести к другому состоянию представления.

12 голосов
/ 26 мая 2010

Если вы знакомы с JavaScript, вы можете представить дерево компонентов JSF немного похожим на HTML DOM, где страница HTML определяет начальное состояние, но вы можете изменить его во время выполнения.

Технология представления (обычно JSP или Facelets) определяет начальное состояние, но после этого им можно манипулировать программно. Например, вы можете добавить компонент или установить свойство . Для правильной работы этого состояния необходимо сохранять состояние просмотра между запросами.

Состояние просмотра разделено на две части. Первый определяет структуру дерева компонентов:

UIView
 - UIForm
    - UICommand
    - UIInput

Вторая часть определяет состояние компонентов. Они разделены из-за таких компонентов, как UIData, где дети могут иметь (например) для каждого состояния строки. Это маршалируется / демаршализируется через механизмы StateHolder .

...