diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java index 0cf943c6e4fa4f78488c5e2268263c854bd6707f..f10fbede193db5151eab379f14de878d6f1c1977 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java @@ -417,7 +417,26 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre pushController(displayName, iconLeftCss, null, uobject); } + /** + * Push the controller in the stack. If the breadcrumb has no controller, the method + * prevent the last breadcrumb to be the same has the new one and be same, it's mean + * the same uobject. + * + * @param displayName + * @param iconLeftCss + * @param controller + * @param uobject + */ public void pushController(String displayName, String iconLeftCss, Controller controller, Object uobject) { + //deduplicate last crumb + if(uobject != null && controller == null && stack.size() > 0) { + Link lastLink = stack.get(stack.size() - 1); + BreadCrumb lastCrumb = (BreadCrumb)lastLink.getUserObject(); + if(lastCrumb.getController() == null && lastCrumb.getUserObject() != null && lastCrumb.getUserObject().equals(uobject)) { + stack.remove(lastLink); + } + } + Link link = LinkFactory.createLink("crumb_" + stack.size(), (Translator)null, this); link.setCustomDisplayText(StringHelper.escapeHtml(displayName)); if(StringHelper.containsNonWhitespace(iconLeftCss)) {