I have a DataTable and I want to sort the columns. The Sortby feature does not work. When you click on it, it does nothing. Instead, if you write something in the filter of the first column and then sort, it works.
OverView.xhtml
Code: Select all
<p:dataTable var="row" value="#{overviewTableBean.overviewTableDataModel}"
id="overviewTable"
paginator="true"
paginatorPosition="bottom"
rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15"
selection="#{overviewTableBean.selectedRows}"
emptyMessage="#{messages['view.campaign.overview.table.empty.rows']}">
<p:column id="columnNameCampaign" sortBy="#{row.campaignName}"
filterBy="#{row.campaignName}"
headerText="#{messages['view.campaign.overview.table.column.nameCampaign']}"
filterMatchMode="contains">
<p:commandLink action="#{processCampaignBean.editCampaign(row.campaignId)}" ajax="false">
<h:outputText value="#{row.campaignName}"/>
</p:commandLink>
</p:column>
<p:column id="columnStatus" sortBy="#{row.campaignState}"
headerText="#{messages['view.campaign.overview.table.column.stateCampaign']}">
<dms:outputText key="#{utilities.getEnumDisplayString(row.campaignState)}"/>
</p:column>
<p:column id="columnAis" sortBy="#{row.totalAis}" headerText="#{messages['view.reporting.ais']}">
<dms:formatNumber value="#{row.totalAis}" pattern="#{messages['i18n.format.units.pattern']}"
emptyText="-"/>
</p:column>
</p:dataTable>
OverviewTableBean
Code: Select all
@Named
@SessionScoped
public class OverviewTableBean extends BaseBean implements Serializable
{
private static final long serialVersionUID = -930803734182351917L;
@Inject
private CampaignOverviewTableDao campaignOverviewTableDao;
@Inject
private ChartBean chartBean;
private OverviewTableDataModel overviewTableDataModel = null;
private CampaignOverviewTableLine[] selectedRows = null;
private SelectItem[] campaignStateList = new SelectItem[5];
public OverviewTableBean()
{
campaignStateList[0] = new SelectItem("", "All");
campaignStateList[1] = new SelectItem(CampaignState.SETUP);
campaignStateList[2] = new SelectItem(CampaignState.CLEARED);
campaignStateList[3] = new SelectItem(CampaignState.ONLINE);
campaignStateList[4] = new SelectItem(CampaignState.OFFLINE);
}
public OverviewTableDataModel getOverviewTableDataModel()
{
overviewTableDataModel = new OverviewTableDataModel(getRows());
return overviewTableDataModel;
}
public void setOverviewTableDataModel(final OverviewTableDataModel aOverviewTableDataModel)
{
overviewTableDataModel = aOverviewTableDataModel;
}
public SelectItem[] getCampaignStateList()
{
return campaignStateList;
}
public void setCampaignStateList(final SelectItem[] aCampaignStateList)
{
campaignStateList = aCampaignStateList;
}
public CampaignOverviewTableLine[] getSelectedRows()
{
return selectedRows;
}
public void setSelectedRows(final CampaignOverviewTableLine[] aSelectedRows)
{
selectedRows = aSelectedRows;
}
/**
* Returns the table rows.
*
* @return the table rows.
*/
public List<CampaignOverviewDataLine> getRows()
{
return campaignOverviewTableDao.getCampaignOverviewDataByFilter(chartBean.getFilterCriteria());
}
/**
* Sets the campaign filter
*/
protected void setCampaignsFilter()
{
if(selectedRows == null)
{
return;
}
final HashSet<Long> selectedCampaignIds = new HashSet<Long>(3);
for(final CampaignOverviewDataLine row : selectedRows)
{
selectedCampaignIds.add(((CampaignOverviewTableLine)row).getCampaignId());
}
chartBean.getFilterCriteria().setCampaignIdList(selectedCampaignIds);
}
}