Jsf richfaces数据表排序与rowclick事件
排序后,Richfaces datatable为rowclick事件返回错误的行。 例如:test.xhtmlJsf richfaces数据表排序与rowclick事件,jsf,datatable,richfaces,javabeans,richdatatable,Jsf,Datatable,Richfaces,Javabeans,Richdatatable,排序后,Richfaces datatable为rowclick事件返回错误的行。 例如:test.xhtml <rich:dataTable id="testId" value="#{testBean.names}" var="name"> <a4j:ajax event="rowclick" listener="#{testBean.selectName(name)}" /> <rich:column id="name" sortBy="#{name}"
<rich:dataTable id="testId" value="#{testBean.names}" var="name">
<a4j:ajax event="rowclick" listener="#{testBean.selectName(name)}" />
<rich:column id="name" sortBy="#{name}" sortOrder="#{testBean.nameOrder}">
<f:facet name="header">
<a4j:commandLink value="Name" execute="@this" render="testId" action="#{testBean.sortByName}" />
</f:facet>
<h:outputText value="#{name}" />
</rich:column>
</rich:dataTable>
TestBean.java
public class TestBean {
private List<String> names;
private SortOrder nameOrder = SortOrder.unsorted;
public TestBean() {
names = new ArrayList<>(Arrays.asList("BBBB", "AAAA", "DDDD", "CCCC"));
}
public List<String> getNames() {
return names;
}
public void selectName(final String name){
System.out.println(name);
}
public void sortByName() {
if (nameOrder.equals(SortOrder.ascending)) {
setNameOrder(SortOrder.descending);
} else {
setNameOrder(SortOrder.ascending);
}
}
public SortOrder getNameOrder() {
return nameOrder;
}
public void setNameOrder(SortOrder nameOrder) {
this.nameOrder = nameOrder;
}
}
如果您运行上面的代码,您将看到每当您单击第一行AAAA时,它将打印控制台BBBB。
当我在firebug上检查它时,我注意到行索引与单元格索引不匹配
<tr id="**page:testId:0**" class="rf-dt-r rf-dt-fst-r" onclick="RichFaces.ajax(this,event,{"parameters":{"javax.faces.behavior.event":"rowclick","org.richfaces.ajax.component":"page:testId"} ,"sourceId":this} )">
<td id="**page:testId:1:name**" class="rf-dt-c">AAAA</td>
</tr>
这是一只脸上的虫子吗?有人能帮我解决这个问题吗?刚刚注意到这是这个问题的重复:我通过使用jquery的客户端排序解决了我的问题。有关更多详细信息,请查看: