Проблемы с сортировкой данных - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь получить данные моего richfaces для сортировки заголовков. Я в основном следовал приведенному здесь коду: http://richfaces -showcase.appspot.com / richfaces / component-sample.jsf? Demo = dataTable & sample = tableSorting & skin = blueSky

Мои заголовки имеют ссылки, и когда я нажимаю на них, в консоли Firebug вы видите, что происходит пост-запрос. После завершения обработки с таблицей ничего не происходит.

Кроме того, у меня есть некоторый код jquery, который выделяет строку, когда ваша мышь наведена на нее. После того, как вы щелкнете по одному из заголовков, выделение строк больше не будет.

Вот мой код.

<h:form>
    <rich:dataTable value="#{protocolDetail.details.protocolEvents}" var="detail" id="table" rows="20" rowClasses="odd, even" styleClass="stable">

        <rich:column sortBy="#{detail.date}">
            <f:facet name="header">
                <a4j:commandLink value="Date" render="table" action="#{protocolDetail.sortByDate}" />
            </f:facet>
            <f:facet name="footer">
                <a4j:commandLink value="Date" render="table" action="#{protocolDetail.sortByDate}" />
            </f:facet>
            <h:outputText value="#{detail.date}" />
        </rich:column>

        <rich:column sortBy="#{detail.description}">
            <f:facet name="header">
                <a4j:commandLink value="Description" render="table" action="#{protocolDetail.sortByDescription}" />
            </f:facet>
            <f:facet name="footer">
                <a4j:commandLink value="Description" render="table" action="#{protocolDetail.sortByDescription}" />
            </f:facet>
            <h:outputText value="#{detail.description}" />
        </rich:column>

        <rich:column sortBy="#{detail.comment}">
            <f:facet name="header">
                <a4j:commandLink value="Comment" render="table" action="#{protocolDetail.sortByComments}" />
            </f:facet>
            <f:facet name="footer">
                <a4j:commandLink value="Comment" render="table" action="#{protocolDetail.sortByComments}" />
            </f:facet>
            <h:outputText value="#{detail.comment}" />
        </rich:column>

    </rich:dataTable>



</h:form>
<rich:jQuery selector=".stable tr" event="mouseover" query="jQuery(this).addClass('active')" />
<rich:jQuery selector=".stable tr" event="mouseout" query="jQuery(this).removeClass('active')" />

боб:

@ManagedBean(name = "protocolDetail")
@SessionScoped
public class ProtocolDetailBacker extends BaseObject {

    private String protocol = "";
    private int studyNumber;

    // private ArrayList<ProtocolDetailBean> details;
    private ProtocolDetailBean details = new ProtocolDetailBean();
    ProtocolDAO dao = new ProtocolDAO();
    private SortOrder dateOrder = SortOrder.UNSORTED;
    private SortOrder descriptionOrder = SortOrder.UNSORTED;
    private SortOrder commentsOrder = SortOrder.UNSORTED;

    public ProtocolDetailBacker() {
        FacesContext context = FacesContext.getCurrentInstance();
        String[] values = context.getExternalContext().getRequestParameterValuesMap().get("protocol");
        setProtocol(values[0]);
    }

    public String getProtocol() {
        return protocol;
    }

    public void setProtocol(String protocol) {
        this.protocol = protocol;
    }

    public ProtocolDetailBean getDetails() {

        try {
            studyNumber = dao.getStudyNumber(getProtocol());
            details.setProtocolNumber(getProtocol());
            details.setStudyChair(dao.getStudyChair(studyNumber));
            details.setShortDesc(dao.getShortDescription(studyNumber));
            details.setLongDesc(dao.getLongDescription(studyNumber));
            details.setPdc(dao.getPDC(studyNumber));
            details.setProtocolEvents(dao.getProtocolEventDetails(getProtocol()));
            System.out.println("");

        } catch (SQLException e) {

            e.printStackTrace();
        }

        return details;
    }

    public void setDetails(ProtocolDetailBean details) {
        this.details = details;
    }

    public int getStudyNumber() {
        return studyNumber;
    }

    public void setStudyNumber(int studyNumber) {
        this.studyNumber = studyNumber;
    }

    public SortOrder getDateOrder() {
        return dateOrder;
    }

    public void setDateOrder(SortOrder dateOrder) {
        this.dateOrder = dateOrder;
    }

    public SortOrder getDescriptionOrder() {
        return descriptionOrder;
    }

    public void setDescriptionOrder(SortOrder descriptionOrder) {
        this.descriptionOrder = descriptionOrder;
    }

    public SortOrder getCommentsOrder() {
        return commentsOrder;
    }

    public void setCommentsOrder(SortOrder commentsOrder) {
        this.commentsOrder = commentsOrder;
    }

    public void sortByDate() {
        descriptionOrder = SortOrder.UNSORTED;
        commentsOrder = SortOrder.UNSORTED;

        System.out.println("dateOrder = "+dateOrder);
        if(dateOrder.equals(SortOrder.ASCENDING)) {
            setDateOrder(SortOrder.DESCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else if(dateOrder.equals(SortOrder.DESCENDING)) {
            setDateOrder(SortOrder.ASCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else {
            setDateOrder(SortOrder.ASCENDING);
            System.out.println("else dateOrder now = "+dateOrder);
        }
    }

    public void sortByDescription() {
        dateOrder = SortOrder.UNSORTED;
        commentsOrder = SortOrder.UNSORTED;

        System.out.println("dateOrder = "+dateOrder);
        if(descriptionOrder.equals(SortOrder.ASCENDING)) {
            setDescriptionOrder(SortOrder.DESCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else if(descriptionOrder.equals(SortOrder.DESCENDING)) {
            setDescriptionOrder(SortOrder.ASCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else {
            setDescriptionOrder(SortOrder.ASCENDING);
            System.out.println("else dateOrder now = "+dateOrder);
        }
    }

    public void sortByComments() {
        descriptionOrder = SortOrder.UNSORTED;
        commentsOrder = SortOrder.UNSORTED;

        System.out.println("dateOrder = "+dateOrder);
        if(commentsOrder.equals(SortOrder.ASCENDING)) {
            setCommentsOrder(SortOrder.DESCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else if(commentsOrder.equals(SortOrder.DESCENDING)) {
            setCommentsOrder(SortOrder.ASCENDING);
            System.out.println("dateOrder now = "+dateOrder);
        } else {
            setCommentsOrder(SortOrder.ASCENDING);
            System.out.println("else dateOrder now = "+dateOrder);
        }
    }

}

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

Сортировка таблицы воссоздает строки.Поэтому события onmouseover и onmouseout больше не связаны с вашими строками после сортировки.

К счастью, jQuery может справиться с этим, создав живой обработчик.Live-Handlers также будут запускать строки, которые добавляются после выполнения вызова jQuery.

Для меня работает следующее:

<rich:jQuery selector=".stable tr" query="live('mouseover mouseout', function(event) {
              if ( event.type == 'mouseover' ) {
                jQuery(this).addClass('active-row');
              } else {
                jQuery(this).removeClass('active-row');
              }});"/>
1 голос
/ 30 декабря 2012

У меня тоже была та же проблема при работе с примером кода, приведенным в демонстрации richfaces, все та же проблема

Я добавил f: ajax к ссылке на команду a: теперь сортировка корректно обновляется

<a4j:commandLink execute="@this" value="Vendor" 
render="carstable" action="#{carsSortingBean.sort}">
<f:param name="sortProperty" value="vendor" />
<f:ajax  render="carstable"  />
</a4j:commandLink>
0 голосов
/ 03 декабря 2011

Если кто-то все еще ищет этот ответ, если вы используете RichFaces 4.0 и JSF 2, попробуйте установить для частичного сохранения состояния JSF значение true в вашем файле web.xml, как показано ниже:

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>true</param-value>
</context-param>
...