How to use rich:componentControl to filter a table?
pkleczek May 21, 2013 2:46 PMI try to reuse this sample: http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=componentControl in my application.
Here's what I have:
XHTML file
<rich:extendedDataTable value="#{overviewHandler.tournaments}"
var="tour" id="table">
...
<rich:column>
...
<h:outputLink value="#">
<rich:componentControl target="allMatches" operation="filter"
event="click">
<f:param value="tournamentId" />
<f:param value="#{tour.id}" />
</rich:componentControl>
<h:outputText value="#{tour.name}" />
</h:outputLink>
</rich:column>
...
</rich:extendedDataTable>
<rich:dataTable value="#{overviewHandler.tournaments}" rows="100"
var="tournament">
...
<rich:column id="tournamentId"
filter="#{tournamentFilteringBean.filterId}">
<rich:collapsibleSubTableToggler for="matchSubtable" />
<h:outputText value="#{tournament.name}" />
</rich:column>
<rich:collapsibleSubTable value="#{tournament.matches}"
var="match" id="matchSubtable">
...
</rich:collapsibleSubTable>
</rich:dataTable>
TournamentFilteringBean.java
package jsf;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Tournament;
import org.richfaces.model.Filter;
@ManagedBean
@SessionScoped
public class TournamentFilteringBean implements Serializable
{
private String idFilter = "";
public Filter<?> getFilterId()
{
return new Filter<Tournament>()
{
public boolean accept(Tournament t)
{
return (getIdFilter().isEmpty() || getIdFilter().equals(t.getId().toString()));
}
};
}
public String getIdFilter()
{
return idFilter;
}
public void setIdFilter(String idFilter)
{
this.idFilter = idFilter;
}
}
But when I click on a link (h:outputLink) nothing in the main table is filtered. I'm not sure what is the meaning of these two parameters used in the tutorial in the <rich:componentControl> tag.
OK, what I want to achieve is - when a user clicks on the name of a tournament, the table with all tournaments and their matches should be filtered so that only entries for the selected tournament are visible.
So basically the question is: how can I set the "idFilter" field in my filtering bean and then invoke the filtering operation on the table when a user clicks on a link?