Per-board drop restrictions allow you to control which columns items can be dropped into. Use the dragTo property on each column to specify a list of target column IDs. Restricted columns are visually dimmed during a drag operation, and drops to disallowed targets are automatically cancelled.
Items follow a strict workflow: Backlog → In Progress → Review → Done. Drops to disallowed columns are automatically rejected.
Source
<pe:kanban id="kanban"
widgetVar="kanbanDropRestrictionsWidget"
value="#{kanbanDropRestrictionsController.columns}"
draggable="true"
style="height:450px">
<p:ajax event="drop" listener="#{kanbanDropRestrictionsController.onDrop}" update="growl" />
</pe:kanban>
@Named
@ViewScoped
public class KanbanDropRestrictionsController implements Serializable {
private static final long serialVersionUID = 1L;
private List<KanbanColumn> columns;
@PostConstruct
public void init() {
columns = new ArrayList<>();
KanbanColumn backlogColumn = new KanbanColumn("backlog", "Backlog");
backlogColumn.setCssClass("kanban-backlog");
backlogColumn.setDragTo(Arrays.asList("inprogress"));
backlogColumn.addItem(new KanbanItem("item1", "Research requirements",
"Gather and analyze project requirements"));
backlogColumn.addItem(new KanbanItem("item2", "Plan sprint",
"Define sprint goals and tasks"));
KanbanColumn inProgressColumn = new KanbanColumn("inprogress", "In Progress");
inProgressColumn.setCssClass("kanban-inprogress");
inProgressColumn.setDragTo(Arrays.asList("review"));
inProgressColumn.addItem(new KanbanItem("item3", "Implement feature X",
"Core implementation of feature X"));
inProgressColumn.addItem(new KanbanItem("item4", "Write unit tests",
"Add unit tests for new modules"));
KanbanColumn reviewColumn = new KanbanColumn("review", "Review");
reviewColumn.setCssClass("kanban-review");
reviewColumn.setDragTo(Arrays.asList("inprogress", "done"));
reviewColumn.addItem(new KanbanItem("item5", "Code review PR #42",
"Review pull request for feature X"));
reviewColumn.addItem(new KanbanItem("item6", "QA verification",
"Verify bug fixes in staging"));
KanbanColumn doneColumn = new KanbanColumn("done", "Done");
doneColumn.setCssClass("kanban-done");
doneColumn.setDragTo(Arrays.asList("review"));
doneColumn.addItem(new KanbanItem("item7", "Deploy v1.0",
"Production deployment completed"));
doneColumn.addItem(new KanbanItem("item8", "Documentation",
"API documentation updated"));
columns.add(backlogColumn);
columns.add(inProgressColumn);
columns.add(reviewColumn);
columns.add(doneColumn);
}
public void onDrop(KanbanDragEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Item Moved",
"Item \"" + event.getItemId() + "\" moved from " + event.getSourceColumnId()
+ " to " + event.getTargetColumnId());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public List<KanbanColumn> getColumns() {
return columns;
}
public void setColumns(List<KanbanColumn> columns) {
this.columns = columns;
}
}