JSF 2.0带有h:datatable的可排序标头

时间:2010-06-23 20:39:46

标签: java jsf

我正在尝试向h:dataTable添加可排序标头。我正在尝试关注http://balusc.blogspot.com/2006/06/using-datatables.html来执行此操作。以下内容呈现链接但不执行任何操作。

list.xhtml 
                <h:dataTable value="#{iptableController.items}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px">

                    <h:column>
                        <f:facet name="header">
                            <h:commandLink actionListener="#{iptableController.sortDataList}">
                                <f:attribute name="sortField" value="getID"/>
                                <h:outputText value="#{bundle.ListIptableTitle_iptableId}"/>
                            </h:commandLink>
                        </f:facet>
                        <h:outputText value="#{item.iptableId}"/>
                    </h:column>

以下是我正在尝试使用的控制器的一部分。

iptableController

public void sortDataList(ActionEvent event) {
    String sortFieldAttribute = getAttribute(event, "sortField");

    // Get and set sort field and sort order.
    if (sortField != null && sortField.equals(sortFieldAttribute)) {
        sortAscending = !sortAscending;
    } else {
        sortField = sortFieldAttribute;
        sortAscending = true;
    }

    // Sort results.
    if (sortField != null) {
        Collections.sort(getFacade().findAll(), new DTOComparator(sortField, sortAscending));
    }
}

DTOCompartor与链接中的相同。

我觉得我完全走错了路,却一直找不到更好的指南。任何帮助都将不胜感激。

编辑:

我开启了更精细的过滤,并且能够看到问题。我不确定是什么导致它,但看起来控制器被添加两次并分配给<error>.包。我重命名了该文件并且已经解决了。在清理了一些其他问题(调用不存在的函数等)后,我遇到了错误:

SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=j_idt12:j_idt22, Message=/iptable/List.xhtml @26,88 actionListener="#{Controller.sortList}": java.lang.RuntimeException: Cannot compare test, test with t, test1 on [getiptableID]
SEVERE: /iptable/List.xhtml @26,88 actionListener="#{Controller.sortList}": java.lang.RuntimeException: Cannot compare test, test with t, test1 on [getiptableID]

DTOComparator中的注释表明://如果发生此异常,则通常是DTO开发人员的错误。

我的吸气者看起来都像:

public String getIptableName() {
    return iptableName;
}

1 个答案:

答案 0 :(得分:1)

  

以下内容会显示链接,但不会执行任何操作

一个常见的原因是它没有放在<h:form>内。没有它,客户端无法向服务器提交任何内容。将<h:dataTable>放在<h:form>内,它应该有效。

如果这不是原因,请检查this answer以获取其他可能原因的列表。


根据您的更新

更新

Cannot compare test, test with t, test1 on [getiptableID]

这意味着没有名为getiptableID的getter。不应该是getIptableID