Частичное сохранение состояния не означает, что состояние не будет сохранено в сеансе.Это означает только то, что часть состояния дерева компонентов будет сохранена вместо всего состояния дерева компонентов.Основная идея частичного сохранения состояния заключается в том, что состояние компонентов, которые не будут изменены клиентской стороной в последующем запросе, не будет сохранено.Вместо этого он получается путем повторного выполнения представления на стороне сервера во время представления восстановления.Будет сохранено только состояние компонента, чувствительное к изменениям со стороны клиента (формы, входы, кнопки и т. Д.).1K, который вы видите в сеансе, - это само частичное состояние.
Чтобы проверить его самостоятельно, включите и выключите состояние с помощью следующего context-param
in web.xml
:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
Вы увидите, что размер увеличивается, если для параметра установлено значение false
, что означает, что вместо него было сохранено полное дерево компонентов.
Оно сохраняется в сеансе, поскольку это толькоServlet API, который имеет большую область, чем область запроса.Хранение в области запроса не будет иметь никакого значения, так как оно не будет доступно для последующего запроса.Servlet API не имеет понятия о области видимости, как в JSF (которая скрывается под косвенным использованием области видимости, кстати, в основном состояние представления является состоянием дерева компонентов).
Вы действительно не понимаетебольше не вижу этого, когда вы удаляете форму, так как на самом деле ничего не осталось, что клиент мог бы изменить (т.е. не было бы обратной передачи).Тогда не было бы смысла спасать государство.Кроме того, нечего было бы передавать ключ сохраненного состояния как скрытое поле ввода (с именем javax.faces.ViewState
).
См. Также: