如何访问 Wicket Palette 中当前选定的项目

How to access the currently selected item within Wicket Palette

我正在尝试覆盖 Wicket Palette 的某些功能。我附上了一张我试图用 Palette 完成的图片。基本上除了 Palette 的 select-item-clickbutton-moveToRight 功能外,我还想知道哪个项目在移动之前已经被 selected。当我 select 任一面板中的一个项目并单击“查看”按钮时,我应该能够显示一个 html 与调色板中当前 selected 项目相关的页面。 现在,按钮被放置在 Palette 代码之外,只要我能得到 selected 元素的 ID,我就能完成我的 objective。 我被困在需要知道调色板中 select 编辑了哪个项目的地步。

这是我目前尝试过的方法: 1. 使用 AjaxFormComponentUpdatingBehavior

向 choicesComponent 添加一个 onclick 侦听器

final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList), formsList, new CustomObjectChoiceRenderer(), 8 , false ){

        @Override
        protected void onBeforeRender() {
            super.onBeforeRender();
            getChoicesComponent().add(new AjaxFormComponentUpdatingBehavior("onclick"){
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    System.out.println("REACHED HERE"+ getFormComponent());
    /*
                 * The code reaches here for each click but I am unable to know which item was selected */
                }
            });

            }

    };
  1. 使用 "onclick" 侦听器将 Recorder 组件添加到 Palette。 此侦听器根本不会被调用。

final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList), formsList, new CustomObjectChoiceRenderer(), 8 , false ){

        protected Recorder newRecorderComponent() {
            Recorder recorder = super.newRecorderComponent();
            recorder.add(new AjaxFormComponentUpdatingBehavior("onclick") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    System.out.println("reached record on click ");


                }
            });
            return recorder;
        }

    };

Trying to create this palette with a custom button

请帮忙。提前致谢。

Palette.java javadoc 解释了如何 "Ajax-ify" 它:https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java#L52-L71

但这对您没有帮助,因为选择首先在客户端完成,然后通知 Wicket: https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js#L118-L127

您需要在 Wicket 之前为 'change' 事件注册您自己的 JS 事件侦听器,或者使用 monkey-patch palette.js 来覆盖 Wicket.Palette.updateRecorder() 函数。