rich:datatable, a4j:support and onRowClick
geggle Sep 3, 2008 11:24 PMI'm attempting to do a simple list and detail display model with the richfaces data table.
From what I can tell, I should use a <a4j:support.../> tag within the <rich:dataTable .../> tag to trigger the selection on the onRowClick event.
However, my action handler never gets called, and I can't work out why.
I have a page of the following form:
<a4j:form id="contactForm" ajaxSubmit="true">
<rich:panel>
<rich:dataTable
id="otherPartyList"
rows="10"
width="100%"
var="party"
rowKeyVar="row"
value="#{contact.interestedParties}"
binding="#{contact.interestedPartiesTable}">
<a4j:support event="onRowClick" action="#{contact.selectRow}" reRender="selectedOtherPartyFragment"/>
<rich:column sortable="false">
<f:facet name="header">
<f:verbatim>Row</f:verbatim>
</f:facet>
<h:outputText value="#{row}" />
</rich:column>
<rich:column sortBy="#{party.title}">
<f:facet name="header">
<f:verbatim>Title</f:verbatim>
</f:facet>
<h:outputText value="#{party.title}" />
</rich:column>
<rich:column sortBy="#{party.name}">
<f:facet name="header">
<f:verbatim>Name</f:verbatim>
</f:facet>
<h:outputText value="#{party.name}" />
</rich:column>
</rich:dataTable>
<a4j:outputPanel id="selectedOtherPartyFragment">
<f:subview id="detail" rendered="#{contact.selectedParty != null}">
<rich:spacer height="10px"/>
<h:outputText value="#{party.title}" />
<h:outputText value="#{party.name}" />
</f:subview>
</a4j:outputPanel>
</rich:panel>
</a4j:form>
and my backing bean (contact) is of this form:
package com.workcover.clw.noc.web.managedBean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.richfaces.component.html.HtmlDataTable;
import com.workcover.clw.noc.domain.InterestedPartyDetails;
public class ContactTab implements Serializable {
/** Version ID */
private static final long serialVersionUID = 4260048709217435243L;
private List<InterestedPartyDetails> interestedParties;
private InterestedPartyDetails selectedRow;
private transient HtmlDataTable interestedPartiesTable;
public ContactTab() {
... set up some test InterestedPartyDetails objects in interestedParties ...
}
public List<InterestedPartyDetails> getInterestedParties() {
return interestedParties;
}
public HtmlDataTable getInterestedPartiesTable() {
return interestedPartiesTable;
}
public void setInterestedPartiesTable(HtmlDataTable interestedPartiesTable) {
this.interestedPartiesTable = interestedPartiesTable;
}
public String selectRow() {
Object obj = getInterestedPartiesTable().getRowData();
selectedRow = (InterestedPartyDetails) obj;
return null;
}
public InterestedPartyDetails getSelectedParty() {
return selectedRow;
}
}
Does anyone have some ideas as to what I am doing wrong? I can't imagine that such a simple interaction can be difficult, but I'm stumped.