#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
.