Подтвердить что ты не робот

Что такое viewstate в JSF и как оно используется?

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

UIView
 - UIForm
    - UICommand
    - UIInput

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