0

我正在尝试为搜索字段制作过滤器,可以在其中检查多个复选框以选择人们想要搜索的内容。我目前正在尝试使用 CheckGroup 组件执行此操作,但由于我没有提交按钮,我不知道如何检索最新的检查对象。这样做的一个想法是使用 Javascript,在 Javascript 中调用一个函数并检索所有类似的复选框。我目前在 Wicket 中有以下代码。所以我的问题是如何做到这一点,以及是否可以不使用 Javascript 做到这一点。我尝试过使用 AjaxFormChoiceComponentBehaviour 并且有效,但由于它会在选中复选框时发布,所以我认为 JS 会是一个更好的选择。

public Filter(String id) {
    super(id);
    form = new Form("filterform");
    types = resultItemHandlerPool.getTypes();

    checkGroup = new CheckGroup<Class<?>>("checkGroup", new PropertyModel<Collection<Class<?>>>(this,"types"));

    ListView typesListview = new ListView<Class<?>>("typesList", new PropertyModel<List<? extends Class<?>>>(this,"types")) {
        @Override
        protected void populateItem(final ListItem<Class<?>> item) {
            item.add(new Check<Class<?>>("check", item.getModel()));  
            item.add(new Label("className", item.getModelObject().getSimpleName()));
        }
    };
    typesListview.setReuseItems(true);

    checkGroup.add(typesListview);

    form.add(checkGroup);
    add(form);
}

public List<Class<?>> getSearchableTypes() {
  return types;
}

谢谢和亲切的问候,

梅林

4

1 回答 1

0

你说你想做搜索服务器端。因此,服务器需要知道检查了哪些项目才能进行搜索。

只需对搜索字段(包括复选框)使用普通的旧表单并使其在输入搜索值后用户发布表单。这样,服务器端代码将接收搜索值和选中复选框的列表,并确切地知道要搜索的内容。

AjaxFormChoiceComponentBehaviour 在每次点击 ajax 帖子后确实会更新服务器端 Checkgroup。如果您只需要在发布搜索值后知道 Checkgroup 的值,就不要使用 AjaxFormChoiceComponentBehaviour 并提交表单。普通表单提交和 ajax 提交都可以在这里工作。

于 2013-05-07T07:01:53.357 回答