PropetyColumn implements IStyledColumn so you can override getCssClass() and return a class if it is null instead of adding the attributemodifier.

And you could create your own model to return a default string when the underlying model is null...

something like this...

public class DefaultModel<T> extends AbstractWrapModel {
     private T default;
     private IModel<T> wrappedModel;
     public DefaultModel(IModel<T> wrappedModel, T default) {
         this.default = default;
         this.wrappedModel = wrappedModel;
     }

     T getObject() {
           T object = wrappedModel.getObject();
           if (object == null) {
               object = default;
           }
         return object;
     }

   T getWrappedModel() {
      return wrappedModel;
   }
}

The above probably doesn't compile... but the idea is you can nest models to hide all the tricky logic away in one place. This is the first time I have seen AbstractWrapModel, so I hope the above is the correct usage.



Ernesto Reinaldo Barreiro wrote:
Maybe something like this?

PropertyColumn<Asset> propertyColumn = new PropertyColumn<Asset>(
new Model<String>("AuditTrain"), "audit_train") {
 private static final long serialVersionUID = 1L;

@Override
public void populateItem(Item<ICellPopulator<Asset>> item,
String componentId, IModel<Asset> rowModel) {
if(rowModel.getObject().getAudit_train() != null)
super.populateItem(item, componentId, rowModel);
else {
item.add(new Label(componentId, "No audit train"));
        item.add(new AttributeModifier("class",true, new
Model<String>("noaudit")));
                         }
 }
};

Best,

Ernesto

On Sat, Jan 2, 2010 at 4:18 AM, Norman Elton <[email protected]> wrote:

I've created a DataTable, which works great. I'd like to define the
behavior if a property returns NULL. For instance, this column
retrieves the AuditTrain object for a given Asset:

columns.add(new PropertyColumn<Asset>(new Model<String>("Audit
Train"), "audit_train");

If the AuditTrain is NULL, I get a null-pointer exception. Ideally,
I'd like to return a column-specific string and css class. Seems that
I need to define a new IColumn.

Any pointers? Has this been done before?

Thanks,

Norman

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




--
Jason Lea


Reply via email to