arya-blue
luna-amber
luna-blue
luna-green
luna-pink
nova-dark
nova-light
saga-blue
vela-blue
Kanban
Demonstrates the bindContextMenu attribute and itemRightClick event. Right-click on any task item to open a PrimeFaces context menu with options to edit, view history, or delete. The itemAdd button on each column allows adding new tasks dynamically.
Delete Task
Are you sure you want to delete this task?
Source

<pe:kanban id="kanban"
                widgetVar="kanbanWidget"
                value="#{kanbanRightClickController.columns}"
                draggable="true"
                addItemButton="true"
                style="height:420px"
                bindContextMenu="contextMenu">
        <p:ajax event="itemRightClick" listener="#{kanbanRightClickController.onItemRightClick}" />
        <p:ajax event="itemAdd" listener="#{kanbanRightClickController.onItemAdd}" update="kanban growl" />
    </pe:kanban>

    <p:contextMenu id="contextMenu" widgetVar="contextMenu" targetFilter=".kanban-item">
        <p:menuitem value="Edit Task"
                    icon="pi pi-pencil"
                    update="dialogContent"
                    oncomplete="PF('taskDialog').show()" />
        <p:divider />
        <p:menuitem value="View History"
                    icon="pi pi-clock"
                    update="historyContent"
                    oncomplete="PF('historyDialog').show()" />
        <p:menuitem value="Delete Task"
                    icon="pi pi-trash"
                    styleClass="text-red-600"
                    onclick="PF('confirmDelete').show()" />
    </p:contextMenu>

    <p:confirmDialog id="confirmDeleteDialog" widgetVar="confirmDelete"
                     showEffect="fade" hideEffect="fade"
                     message="Are you sure you want to delete this task?"
                     header="Delete Task" icon="pi pi-exclamation-triangle"
                     closeOnEscape="true" width="400">
        <p:commandButton value="Delete"
                         styleClass="ui-button-danger mr-2"
                         actionListener="#{kanbanRightClickController.deleteSelectedItem}"
                         process="@this"
                         update="@(.ui-kanban) growl"
                         oncomplete="PF('confirmDelete').hide()"
                         icon="pi pi-check" />
        <p:commandButton value="Cancel"
                         onclick="PF('confirmDelete').hide()"
                         type="button"
                         styleClass="ui-button-secondary"
                         icon="pi pi-times" />
    </p:confirmDialog>

    <p:dialog header="Task Details" widgetVar="taskDialog"
              modal="true" responsive="true" width="400"
              showEffect="fade" hideEffect="fade"
              closeOnEscape="true">
        <h:panelGroup id="dialogContent" layout="block" styleClass="ui-fluid">
            <h:panelGroup rendered="#{not empty kanbanRightClickController.selectedItem}">
                <div class="field mb-3">
                    <p:outputLabel for="title" value="Title" styleClass="font-bold block mb-1" />
                    <p:inputText id="title" value="#{kanbanRightClickController.selectedItem.title}" readonly="true" />
                </div>
                <div class="field mb-3">
                    <p:outputLabel for="desc" value="Description" styleClass="font-bold block mb-1" />
                    <p:inputTextarea id="desc" value="#{kanbanRightClickController.selectedItem.description}" rows="3" readonly="true" />
                </div>
            </h:panelGroup>
            <h:panelGroup rendered="#{empty kanbanRightClickController.selectedItem}">
                <p>Right-click on a task and select "Edit Task" to see its details here.</p>
            </h:panelGroup>
        </h:panelGroup>
    </p:dialog>

    <p:dialog header="Task History" widgetVar="historyDialog"
              modal="true" responsive="true" width="400"
              showEffect="fade" hideEffect="fade"
              closeOnEscape="true">
        <h:panelGroup id="historyContent" layout="block" styleClass="ui-fluid">
            <h:panelGroup rendered="#{not empty kanbanRightClickController.selectedItem}">
                <p>Activity history for <strong>#{kanbanRightClickController.selectedItem.title}</strong>:</p>
                <ul>
                    <li>Created - Jan 15, 2026</li>
                    <li>Moved to #{kanbanRightClickController.selectedColumnId} - Jan 20, 2026</li>
                    <li>Milestone updated - Feb 01, 2026</li>
                </ul>
            </h:panelGroup>
            <h:panelGroup rendered="#{empty kanbanRightClickController.selectedItem}">
                <p>Right-click on a task and select "View History" to see its activity timeline.</p>
            </h:panelGroup>
        </h:panelGroup>
    </p:dialog>
            
Components and more
Documentation pe:kanban
Attributes (move mouse over the names to see data types)
Name Description
addItemButtonEnable add item button on each board.Default is false.
bindContextMenuClient-side id of a PrimeFaces contextMenu component to bind to right-click events.
bindingAn EL expression referring to a server side UIComponent instance in a backing bean.Default is generated.
dragBoardsEnable board (column) dragging and reordering.Default is true.
dragHandleEnable drag handle on items. When enabled, only the handle area is draggable, preventing accidental drags on the card body.Default is false.
draggableEnable drag-and-drop functionality.Default is true.
extenderJavaScript function to extend the widget configuration.
gutterGutter (spacing) between boards in CSS units, e.g. "15px".Default is 15px.
idUnique identifier of the component in a namingContainer.Default is generated.
renderedBoolean value to specify the rendering of the component, when set to false component will not be rendered.Default is true.
responsivePercentageIf true, boards use percentage-based widths instead of fixed pixel widths.Default is false.
styleInline CSS style of the component.
styleClassStyle class of the component.
valueList of KanbanColumn objects representing the kanban board columns and items.
widgetVarName of the client side widget.Default is generated ('widget_' + componentClientId).
widthBoardDefault width of each board in CSS units, e.g. "250px".Default is 250px.
PrimeFaces Extensions Showcase - © 2011-2026,PrimeFaces: 16.0.0-RC1,PrimeFaces Extensions: 16.0.0-SNAPSHOT,JSF: Apache MyFaces Core 4.0 - Impl 4.0.3,Server: Apache Tomcat (TomEE)/10.1.52 (10.1.4),Build time: 2026-07-24 12:41