Step 5: Adding delete buttons

The next step is to add delete buttons to the rows containing the address data on the address page, so that the user is able to delete addresses.

Figure 1. Address table with delete buttons

These buttons can be implemented in the PMO class. We simply define a new @UIButton and pass the element we want to delete to a consumer in its method. This consumer is stored as a new attribute in the AddressRowPmo and AddressTablePmo classes and is set at construction.
    private Address address;
    private Consumer<Address> deleteConsumer;

    public AddressRowPmo(Address address, Consumer<Address> deleteConsumer) {
        this.address = address;
        this.deleteConsumer = deleteConsumer;

    public Address getAddress() {
        return address;
    @UITableColumn(width = 50)
    @UIButton(position = 60, captionType = CaptionType.NONE, showIcon = true,
            icon = VaadinIcons.TRASH)
    public void deleteButton() {

In the AddressPage, we implement the actual method that deletes the address for the particular partner and use it as the Consumer when instantiating AddressTablePmo.
    public AddressPage(
            BusinessPartner partner, BusinessPartnerRepository repository) {
        this.partner = partner;
        this.addressTable = new AddressTablePmo(partner, this::deleteAddress);
        this.repository = repository;

    public void deleteAddress(Address address) {