Search code examples
javawicketwicket-6

How to add CSS class to AbstractColumn table header


I need to change dynamically the CSS class for a Wicket data table. Any suggestions how to do it?

Sample code:

public class TextColumn<T> extends PropertyColumn<T, String>

private static final long serialVersionUID = 1L;

public TextColumn(IModel<String> displayModel, String propertyExpression)
{
    super(displayModel, propertyExpression);
}

public TextColumn(IModel<String> displayModel, String sortProperty, String propertyExpression)
{
    super(displayModel, sortProperty, propertyExpression);
}

@Override
public String getCssClass()
{
    return getPropertyExpression();
}

@Override
public void populateItem(Item<ICellPopulator<T>> item, String componentId, IModel<T> rowModel)
{
    item.add(new Label(componentId, getDataModel(rowModel)).setEscapeModelStrings(false));
}

@Override
public IModel<Object> getDataModel(IModel<T> rowModel)
{
    final IModel<Object> model = super.getDataModel(rowModel);

    final Object object = model.getObject();

    return model;

    if((object != null) )
    {
        return Model.of(new Model<String>("label here"));
    }
    else
    {
        return model;
    }
}       

}

Solution

  • You need to override org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn#getHeader()

    @Override 
    public Component getHeader(final String componentId)
    {
        Component header = super.getHeader(componentId);
        header.add(AttributeModifier.replace("class", "myCssClass"));
        return header;
    }