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 № 1To 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.