/ / Reduzindo o tamanho da saída HTML compartilhando f: selectItems entre h: selectOneMenu? - html, jsf, facelets

Reduzindo o tamanho da saída HTML compartilhando f: selectItems entre h: selectOneMenu? - html, jsf, facelets

Tem uma página com ui: repeat ligada a uma coleção de listas como abaixo:

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

Eu tenho uma lista de produtos sendo exibidos vinculando a uma lista suspensa em um campo de produto como acima.

Funciona bem, mas o número de# {productcategories} é muito grande, cerca de 500 categorias e está aumentando; portanto, para cada repetição, os itens suspensos são exibidos no arquivo HTML. Isso aumenta o tamanho do arquivo, especialmente quando a lista de produtos está nos 50 itens por página; portanto, há uma maneira de reduzir o tamanho do HTML de saída compartilhando o h: selectItems entre vários menus suspensos?

Alguém tem alguma ideia?

Respostas:

1 para resposta № 1

Isso não é possível. Essa é a natureza do HTML. O HTML <option> elementos gerados por <f:selectItems> tem que ir no <select> elemento gerado pelo JSF <h:selectOneMenu> de qualquer maneira e não podem ser referenciados um do outro.

Você pode considerar renderizar (mostrar / ocultar) componentes condicionalmente no lado do servidor pelo rendered atributo para que a saída HTML gerada sejamenos grande. Você também pode considerar ativar a compactação GZIP na resposta no contêiner de servlet que estiver usando, para que a largura de banda da rede seja salva.