Czy częściowe zapisywanie stanu powinno być ustawione na wartość false?

Wydaje się, że dzisiaj (kwiecień 2012), zarówno implementacje MyFaces, jak i Mojarra w JSF 2.1 mają defekty dotyczące częściowego zapisywania stanu i że PARTIAL_STATE_SAVING powinno być ustawione na false.

Czy to prawda?

Author: BestPractices, 2012-04-26

1 answers

Czy PARTIAL_STATE_SAVING powinno być ustawione na false?

Tylko gdy napotkasz ogólną wadę związaną z częściowym zapisywaniem stanu w swojej aplikacji webowej, która może naprawdę nie być rozwiązana / workarounded w inny sposób. Częściowe zapisywanie stanu ma mianowicie główne zalety dotyczące ogólnej wydajności i wykorzystania pamięci. Zobacz także dlaczego JSF zapisuje stan komponentów interfejsu użytkownika na serwerze?

Nie mogę w 100% wiarygodnie mówić w imieniu moich ludzi, ale w Mojarra główna przyczyna problemów związanych z częściowym zapisywaniem stanu pojawi się, gdy przypisujesz dowolny atrybut obsługi znaczników (procedury obsługi znaczników są rozpoznawalne przez brak atrybutu rendered na znaczniku, takiego jak znaczniki JSTL) do widoku Bean, lub gdy przypisujesz id lub binding atrybut komponentu JSF do widoku Bean (atrybuty te są rozwiązywane podczas budowania/przywracania widoku).

[[9]} ten problem jest spowodowany przez problem z jajkiem kurzym, jak opisano w problem z JSF 1492 i JSF Spec issue 787 : przy włączonym zapisywaniu stanu częściowego, fasolki z zakresem widoku były przechowywane w stanie widoku częściowego. Tak więc, aby wyodrębnić fasolę widoku z zakresem, należy przywrócić stan widoku częściowego. Podczas przywracania (budowania) widoku, EL we wszystkich wyżej wymienionych atrybutach zostanie oceniony. Ponieważ jednak nie ma instancji view scoped bean dostępnej w tym momencie, zostanie utworzona zupełnie nowa instancja. Będzie to jednak miało wszystkie jego właściwości ustawione na default! Po przywróceniu widoku i przywróceniu oryginalnego zakresu widoku, zostaną one umieszczone z powrotem w obszarze widoku, nadpisując (tymczasowe) wystąpienia utworzone podczas przywracania widoku. Ale wyrażenia EL tych atrybutów zostały już ocenione na podstawie zupełnie innej instancji i nie można ich przywrócić.

Ten problem z jajkiem kurzym został rozwiązany od wersji Mojarra 2.1.18 i 2.2.0 przez przechowywanie fasoli z zakresem widoku w sesji. Jeśli z jakiegoś powodu nie możesz uaktualnić, to można rzeczywiście rozwiązać, wyłączając częściowe zapisywanie stanu, ustawiając javax.faces.PARTIAL_STATE_SAVING na false. Alternatywą jest po prostu , a nie Wiązanie wyżej wymienionych atrybutów do widoku, ale szukanie alternatywnego rozwiązania.

Można również ustawić javax.faces.FULL_STATE_SAVING_VIEW_IDS zamiast tego. Pozwala to określić oddzieloną przecinkami listę wszystkich identyfikatorów widoków, dla których częściowe zapisywanie stanu musi być wyłączone:

<context-param>
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
    <param-value>/some.xhtml,/other.xhtml</param-value>
</context-param>

Pozwala to w jak największym stopniu korzystać z częściowego Oszczędzania państwa i wyłącz go tylko dla podzbioru widoków, na których problemy związane z zapisywaniem stanu częściowego nie mogą być naprawione.

Zobacz też:

 25
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:27