I’m trying to create select all functionality based on rowHeader header column click.
Firstly I create new css rules to show selected or no selected “checkbox” in row level
table.addHeaderClickListener(new HeaderClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void headerClick(HeaderClickEvent event) {
if (event.getPropertyId() == null) {
//select all rows applicationdata contains info all selected or not
removeStyleName("checked");
removeStyleName("unchecked");
if(getData()){
setData(false);
addStyleName("unchecked");
return;
}
setData(true);
addStyleName("checked");
setValue(getItemIds());
}
}
});
Wild guess was that property id is null when rowHeader was clicked because I can set rowHeader column width by setting
table.setColumnWidth(null, 20);
This info comes from
https://vaadin.com/forum#!/thread/550933
…but headerClick() was never invoked when rowHeader header column was clicked. Other header columns send click event just like expected.
I made some client side debug and notice that normal header column send event to the server by invoking method HeaderCell.fireHeaderClickedEvent(Event) but rowHeader header column never invoke this method.
Is this bug or something else?
The HeaderClickListener listenes for clicks on the
column header , not the row header, as the javadoc states:
/**
* Interface for the listener for column header mouse click events. The
* headerClick method is called when the user presses a header column cell.
*/
I suppose the listener you ar searching for is
ItemClickListener .
[code]
public class RowHeadersHeaderCell extends HeaderCell {
RowHeadersHeaderCell() {
super(ROW_HEADER_COLUMN_KEY, "");
updateStyleNames(VScrollTable.this.getStylePrimaryName());
}
@Override
protected void updateStyleNames(String primaryStyleName) {
super.updateStyleNames(primaryStyleName);
setStyleName(primaryStyleName + "-header-cell-rowheader");
}
@Override
protected void handleCaptionEvent(Event event) {
// NOP: RowHeaders cannot be reordered
// TODO It'd be nice to reset sorting here
}
}
[/code]ItemClickListener events are not sent when you click header or footer row thats why I like to use HeaderClickListener.
I debug more and reason why event never sent is that RowHeadersHeaderCell class overrides handleCaptionEvent method and there is only null implementation coded. As comment says reorder is not needed but someone may want do something when icon column header cell is clicked.
Component extension was our saver in this case.
We create (THX to Vaadin Ltd) table extension where we register new event handler to the table.
Extend method in connector class