К сожалению, я допустил ошибку в выборе JSF для приложения с высоким доступом к интернету, теперь мне интересно, как улучшить масштабируемость этого веб-приложения JSF.
У меня есть страница JSF, в которой отображается большое количество элементов, каждый из которых может быть прокомментирован.
Чтобы уменьшить состояние и улучшить производительность, я пытаюсь уменьшить значение forms
/commandButtons
на странице.
1.
Какими способами можно уменьшить дерево компонентов/состояние JSF? Являются ли простые элементы html (которые смешиваются между метками jsf) также являются частью дерева компонентов? Я не знаю, как сохранение состояния компонента было полезным для моего приложения, так как я выполнял модель простого запроса/ответа при разработке своего приложения (может быть, это полезно только для внутренних требований JSF)!?
2.
Я думал о том, что вместо того, чтобы создавать отдельный <h:form>
(каждый с отдельным commandButton
) для каждого элемента, как показано ниже,
(Обычный подход)
<h:form> <!-- for each item a separately --> <h:outputText value="Add comment"/> <h:inputTextarea value="#{itemController.comment}" required="true"/> <p:commandButton actionListener="#{itemController.addUserComment(123)}" value="Add" /> </h:form>
(альтернативный подход)
Я пытаюсь сделать это лучше, просто поместив один remoteCommand для всех элементов и передав необходимые параметры этой удаленной команде.
<form> <input id="item1_comment"/> <button onclick="addComment(123, 'item1_comment');"/> </form> <script type="text/javascript"> function addComment(itemId, id) { $('#comment_in').attr('value', $('#'+id).attr('value')); $('#forItem_in').attr('value', itemId); addComment_RC(); // call remoteCommand to show the content in dialog } </script> <h:form prependId="false" > <!-- for all items, just single remoteCOmmand --> <h:inputHidden id="comment_in" value="#{itemController.comment}"/> <h:inputHidden id="forItem_in" value="#{itemController.forItem}"/> <p:remoteCommand name="addComment_RC" process="@form" actionListener="#{itemController.addComment()}" /> </h:form>
Лучше ли это делать (или есть ли какие-либо проблемы с этим подходом)?