JSF 2.0 частичное сохранение состояний, похоже, не работает

StackOverflow https://stackoverflow.com/questions/4390711

Вопрос

Я оцениваю возможность использования JSF на веб-сайте с высоким трафиком. Мне сказали, что в JSF 2.0 дерево компонентов не хранится в сеансе, и что только дельты хранятся после изменения дерева компонентов.

Вот страница, которую я просматриваю:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h:form>
            hello, world
        </h:form>
    </body>
</html>

Каждый раз, когда я смотрю на эту страницу, почти 1K выделяется на сеанс. Если я удалю <form> Тег, в сеансе ничего не хранится.

Есть идеи, почему на сеансе хранится дерево компонентов? Я думаю, что это будет рассчитано по запросу на отправку.

Это было полезно?

Решение

Сохранение частичного состояния не означает, что государство не будет сохранено на сессии. Это только означает, что часть состояния дерева компонентов будет сохранено вместо весь состояние дерева компонентов. Ключевая идея частичного сохранения состояния заключается в том, что состояние компонентов, которое не будет изменено стороной клиента в последующем запросе, не будет сохранено. Вместо этого он получается путем повторного выполнения представления на стороне сервера во время представления восстановления. Будет сохранено только состояние компонента, которое чувствительно к изменениям клиентом (формы, входы, кнопки и т. Д.). 1K, который вы видите на сессии, является самостоятельным состоянием.

Чтобы проверить это самостоятельно, включите и выключает состояние следующим образом context-param в web.xml:

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

Вы увидите, что размер увеличивается, когда настройка false, что означает, что весь Вместо этого дерево компонента сохраняется.

Он хранится на сессии, потому что это единственное, предоставленное API сервлета, которое имеет больший объем, чем прицел для запроса. Хранение в области запроса не будет иметь никакой ценности, поскольку оно больше не будет доступно по последующему запросу. API сервлета не имеет представления о сфере представления, как и JSF (который, кстати, косвенно использует сессию, в основном состояние представления является состоянием дерева компонентов).

Вы действительно больше не видите этого, когда удаляете форму, так как на самом деле ничего не осталось, что клиент мог бы изменить (то есть не было бы возврата). Тогда не было бы смысла спасти состояние. Кроме того, нечего передать ключ из сохраненного состояния как скрытого поля ввода (с именем javax.faces.ViewState).

Смотрите также:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top