我正在尝试向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;
}
答案 0 :(得分:1)
以下内容会显示链接,但不会执行任何操作。
一个常见的原因是它没有放在<h:form>
内。没有它,客户端无法向服务器提交任何内容。将<h:dataTable>
放在<h:form>
内,它应该有效。
如果这不是原因,请检查this answer以获取其他可能原因的列表。
更新:
Cannot compare test, test with t, test1 on [getiptableID]
这意味着没有名为getiptableID
的getter。不应该是getIptableID
?