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