Richfaces データテーブルは、並べ替え後に 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}" 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>
それはリッチフェイスのバグですか?誰かがこの問題を解決するのを手伝ってくれますか?