I like WODisplayGroups. OK, call me crazy – or lazy – but I like them alot. However, I do find that I often need more control over them than the drag and drop creation gives me. So here is how I like to set up WODisplayGroups programatcially:
Just to prevent any potential confusion: This example demonstrates creating a WODisplayGroup from scratch, and will not work if you’ve created one by dragging an Entity from EOModeler into WebObjects Builder. – Thanks Alex!
Using this pattern setup the _displayGroup object
protected WODisplayGroup _displayGroup;
public WODisplayGroup displayGroup() {
if (_displayGroup == null) {
prepDisplayGroup();
find();
}
return _displayGroup;
}
public void setDisplayGroup(WODisplayGroup dg) {
_displayGroup = dg;
}
Add the prepDisplayGroup()
method:
public void prepDisplayGroup() {
_displayGroup = new WODisplayGroup();
_displayGroup.setNumberOfObjectsPerBatch(10);
EOSortOrdering asc = EOSortOrdering.sortOrderingWithKey(
"keyToSortOn",
EOSortOrdering.CompareAscending);
NSArray ordering = new NSArray(new Object[] {asc});
_displayGroup.setSortOrderings(ordering);
}
The WODisplayGroup API is here
Finally add the find()
method:
public void find() {
NSArray foundObjects = //fetch your objects here
displayGroup().setObjectArray(foundObjects);
}
In my find()
method I usually take advantage of the objectsFor...
methods that can be generated by EOGenerator. These wrap your EOModel’s fetchSpecs in static methods in your EO’s, very cool. Take a look at the EOGenerator EOGJavaSource.eotemplate for more details. Update: I’ve blogged more details about my EOGenerator templates here
I often base my search pages on a common super class that includes a displayGroup along with variables for setting objects per batch and a search string amongst other things.