Я реализовал механизм упорядочения для сортировки результата таблицы (загруженной из базы данных).Все бины - requestScoped, и я делаю новый запрос к базе данных каждый раз, когда пользователь сортирует результат.Моя проблема в том, что он работает хорошо с первого раза, но моя таблица сбрасывается, если я нажимаю дважды.После поиска в Google я обнаружил, что использовал ту же идею, описанную здесь (thx Balusc;)).
Более подробно, я создал пользовательский компонент для вставки в каждый заголовок столбцов:
<composite:interface>
<composite:attribute name="label" required="true" shortDescription="The label of the link"/>
<composite:attribute name="action" required="true" shortDescription="The action for sorting"/>
<composite:attribute name="columnName" required="true" shortDescription="The identifier of the column"/>
<composite:attribute name="update" required="true" shortDescription="The id of element to update"/>
<composite:attribute name="sortColumn" required="true" shortDescription="The column which we want sort"/>
<composite:attribute name="sortOrder" required="true" shortDescription="The order of sort"/>
</composite:interface>
<composite:implementation>
<h:panelGroup
rendered="#{cc.attrs.sortColumn!=cc.attrs.columnName}">
<p:commandLink action="#{cc.attrs.action}"
update="#{cc.attrs.update}"
value="#{cc.attrs.label}"
styleClass="sortable">
<f:param name="sortOrder" value="ASCENDING" />
<f:param name="sortColumn" value="#{cc.attrs.columnName}" />
</p:commandLink>
</h:panelGroup>
<h:panelGroup
rendered="#{cc.attrs.sortColumn==cc.attrs.columnName and cc.attrs.sortOrder=='DESCENDING'}">
<p:commandLink action="#{cc.attrs.action}"
update="#{cc.attrs.update}"
value="#{cc.attrs.label}"
styleClass="desc">
<f:param name="sortOrder" value="ASCENDING" />
<f:param name="sortColumn" value="#{cc.attrs.columnName}" />
</p:commandLink>
</h:panelGroup>
<h:panelGroup
rendered="#{cc.attrs.sortColumn==cc.attrs.columnName and cc.attrs.sortOrder=='ASCENDING'}">
<p:commandLink action="#{cc.attrs.action}"
update="#{cc.attrs.update}"
value="#{cc.attrs.label}"
styleClass="asc">
<f:param name="sortOrder" value="DESCENDING" />
<f:param name="sortColumn" value="#{cc.attrs.columnName}" />
</p:commandLink>
</h:panelGroup>
</composite:implementation>
И я определил два скрытых поля в форме моей страницы jsf:
<h:inputHidden value="#{myBean.sortOrder}" />
<h:inputHidden value="#{myBean.sortColumn}" />
Если кто-то может объяснить, где я не прав?