Ответ 1
Проблемы с производительностью в описываемой вами ситуации часто вызваны большим числом выражений EL, что обременяет сервер.
Одним из подходов к решению этой проблемы является вычисление комментариев на стороне клиента и передача их сразу на сервер. Таким образом, уменьшает количество выражений выражения EL комментария до одного или ничего, и использует только одну кнопку.
Поместите все элементы в одну форму. Поля комментариев не привязаны.
<h:form>
// first element
<h:outputText value=#{first element}
// first comment
<h:inputTextarea id="comment1"/> <-- notice there is no EL expression
But we use a unique id for each comment
// second element
<h:outputText value=#{second element}
// second comment
<h:inputTextarea id="comment2"/>
.
.
.
</h:form>
Отсюда вы можете либо
1. после каждого события размытия в любом из полей комментариев, ajax сервера и передайте в качестве параметров комментарий и идентификатор комментария, из которого следует вызов ajax был сделан. на сервере обновите свою модель соответственно
Или Вы также можете собрать все комментарии на стороне клиента и отправить их на сервер за один раз.
2.. Когда пользователь нажимает кнопку отправки, вызывается функция js для агрегирования всех комментариев в структуре, которые вы сможете легко анализировать на стороне сервера
(т.е. "{c1,comment a};{c2,comment b};{c5=,comment e}..."
).
передать эту строку на сервер, проанализировать ее и соответствующим образом обновить вашу модель.
3. после каждого события размытия в любом из полей комментариев вызовите функцию js, которая обновляет скрытое поле.
<h:inputHidden value="{myClass.allComments}" />
когда пользователь отправляет форму, разобрать allComments и соответствующим образом обновить вашу модель.
EDIT:
Чтобы решить проблему с общей производительностью, я добавил рекомендации из статьи, которую я нашел полезной ускорить часть 1 Ускорить часть 2.
Надеюсь, что это поможет
btw, я бы рекомендовал первый подход, а не последние два.