механизм подкачки / упорядочивания с использованием jsf2 - PullRequest
0 голосов
/ 22 марта 2012

Я реализовал механизм упорядочения для сортировки результата таблицы (загруженной из базы данных).Все бины - 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}" />

Если кто-то может объяснить, где я не прав?

...