返回从Javascript到Wicket的已选中复选框列表

时间:2013-05-03 06:36:33

标签: java javascript wicket

我正在尝试为搜索字段制作过滤器,其中可以检查多个复选框以选择人们想要搜索的内容。我目前正在尝试使用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;
}

谢谢和亲切的问候,

Merlijn

1 个答案:

答案 0 :(得分:0)

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

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

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