/ / Zmniejszenie rozmiaru wyjścia HTML poprzez udostępnienie f: selectItems pomiędzy h: selectOneMenu? - html, jsf, facelets

Zmniejszanie rozmiaru wyjścia HTML przez udostępnianie f: selectItems między h: selectOneMenu? - html, jsf, facelets

Masz stronę z interfejsem użytkownika: powtórz powiązanie z kolekcją list, jak poniżej:

<ui:repeat value="#{myBean.products}" var="product">
....
....
<h:selectOneMenu id="type" required="true" value="#{product.category}">
<f:selectItems value="#{productcategories}"/>
</h:selectOneMenu>
</ui:repeat>

Mam listę wyświetlanych produktów wiążących się z rozwijaną listą w polu produktu jak powyżej.

Działa dobrze, ale liczba# {productcategories} jest bardzo duży, około 500 kategorii i rośnie, więc przy każdym powtórzeniu rozwijane elementy są wyprowadzane w pliku HTML. Zwiększa to rozmiar pliku, zwłaszcza gdy lista produktów zawiera 50 elementów na stronie, więc czy istnieje sposób, aby zmniejszyć rozmiar wyjściowego HTML poprzez udostępnienie h: selectItems wśród wielu rozwijanych?

Czy ktoś ma jakieś pomysły?

Odpowiedzi:

1 dla odpowiedzi № 1

To nie jest możliwe. Taka jest natura HTML. HTML <option> elementy generowane przez <f:selectItems> musi iść w <select> element wygenerowany przez JSF <h:selectOneMenu> zresztą i nie można odwoływać się do siebie nawzajem.

Możesz rozważyć renderowanie (pokazywanie / ukrywanie) komponentów warunkowo po stronie serwera przez rendered atrybut, aby wygenerowane wyjście HTML miało wartośćmniej duży. Można również rozważyć włączenie kompresji GZIP w odpowiedzi w używanym kontenerze serwletu, aby zapisać przepustowość sieci.