Уменьшение размера выходных данных HTML путем совместного использования f: SelectItems между h:selectOneMenu?

#html #jsf #facelets

#HTML #jsf #лицевые панели

Вопрос:

Есть страница с ui: repeat, привязанная к коллекции списков, как показано ниже:

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

У меня отображается список продуктов, привязанный к выпадающему списку в поле product, как указано выше.

Это работает нормально, но количество #{productcategories} очень велико, около 500 категорий и увеличивается, поэтому при каждом повторении выпадающие элементы выводятся в HTML-файл. Это увеличивает размер файла, особенно когда список продуктов содержит 50 элементов на странице, так есть ли способ уменьшить размер выходного HTML-кода, разделив h: SelectItems между несколькими выпадающими списками?

У кого-нибудь есть какие-нибудь идеи?

Ответ №1:

Это невозможно. Такова природа HTML. <option> Элементы HTML, сгенерированные <f:selectItems> , в любом случае должны входить в <select> элемент, сгенерированный JSF <h:selectOneMenu> , и на них нельзя ссылаться друг на друга.

Вы могли бы рассмотреть возможность условного отображения (show / hide) компонентов на стороне сервера с помощью rendered атрибута, чтобы сгенерированный HTML-вывод был менее большим. Вы также могли бы включить сжатие GZIP для ответа в используемом вами servletcontainer, чтобы сохранить пропускную способность сети.

Комментарии:

1. Показывать / скрывать — это не вариант, поскольку мне нужно, чтобы он отображался. Gzip звучит лучше, но я предполагаю, что проблема все еще остается по мере увеличения размера страницы и количества элементов.

2. Затем сделайте это опцией или просто смиритесь с этим. Gzip определенно должен сильно помочь. Это может уменьшить размер ответа примерно на 70%. Например, в Tomcat это так же просто, как добавить compression="on" к <Connector> элементу в /conf/server.xml .