How do I add a custom button on a listgrid toolbar?

To add a custom button/action to a listgrid we need to create a new ListGridAction and add it to the listgrid. We have a good sample in the BLC codebase with the Generate Skus action on the AdminProductController.

//Skus have a specific toolbar action to generate Skus based on permutations
EntityForm form = (EntityForm) model.asMap().get("entityForm");
ListGridAction generateSkusAction = new ListGridAction(ListGridAction.GEN_SKUS).withDisplayText("Generate_Skus")
        .withIconClass("icon-fighter-jet")
        .withButtonClass("generate-skus")
        .withUrlPostfix("/generate-skus")
        .withActionUrlOverride("/product/" + id + "/additionalSkus/generate-skus");

ListGrid skusGrid = form.findListGrid("additionalSkus");
if (skusGrid != null) {
    skusGrid.setCanFilterAndSort(false);
}

ListGrid productOptionsGrid = form.findListGrid("productOptions");
if (productOptionsGrid != null) {
    productOptionsGrid.addToolbarAction(generateSkusAction);
}

Reference:
https://github.com/BroadleafCommerce/BroadleafCommerce/blob/develop-5.2.x/admin/broadleaf-admin-module/src/main/java/org/broadleafcommerce/admin/web/controller/entity/AdminProductController.java#L348-L362