Wicket - 单击上下文菜单时顶级菜单冻结

Wicket - Top level menu freezes on click of Context Menu

我的应用程序具有显示某些报告详细信息的页面的顶级菜单和上下文菜单。单击此上下文菜单图标后,我将获得一个包含某些操作的上下文菜单,如下所示

现在,问题是每当我单击此上下文菜单但什么都不做(未从该上下文菜单中选择任何操作)时,顶级菜单被冻结。我需要刷新页面才能使其正常工作。我正在使用下面的 wicket 代码来处理上下文菜单上的操作 -

单击上下文菜单时,操作将为空,单击 删除编辑复制, action会进入else循环。如果它进入 else 循环,我很好,因为页面将导航到另一个并且顶级菜单有效。如果操作为 null,调用 scheduleRequestHandlerAfterCurrent,我将面临冻结顶级菜单的问题。

@Override
    public void onRequest()
    {
        final Component component = getComponent();
        final IRequestCycle cycle = component.getRequestCycle();
        final IRequestParameters parameters = cycle.getRequest().getRequestParameters();
        final String action = parameters.getParameterValue("action").toString(null);
        if (null == action)
        {
            cycle.scheduleRequestHandlerAfterCurrent(new TextRequestHandler("application/json", "UTF-8",
                    buildResponse()));
        } else
        {
            final String target = parameters.getParameterValue("targetId").toString(null);
            if (null == target)
            {
                throw new RuntimeException(
                        String.format("Did not receive a target object identifier for action [%s].", action));
            }
            menu.getAdapter().performActionOnTarget(component, action, target);
        }
    }

检查浏览器的 DevTools 中是否存在 JavaScript 错误。在 if 子句中,您 return 直接 JSON 到浏览器。此 JSON 不是由 Wicket 处理,而是由自定义 JavaScript 处理。如果出现错误,那么很可能是其他 JavaScript 事件未注册,任何点击都不会触发它。

在显示上下文菜单之前,自定义 JS 中有一个 $(document).unbind('click'); 行。此上下文菜单早期设计为在鼠标右键单击时显示。在新的实现中,它被更改为在单击鼠标时显示。在我的案例中,删除那个 unbind 语句解决了这个问题..