wicket 6.0.0-beta2使用AjaxButton提交表单时更新DataTable的内容

wicket 6.0.0-beta2使用AjaxButton提交表单时更新DataTable的内容,ajax,wicket-1.6,wicket-6,Ajax,Wicket 1.6,Wicket 6,我想根据表单的内容更改DataTable的内容(将其视为搜索栏功能)。我曾经在wicket 1.5.x中这样做,但在wicket 6.0.0-beta2中,我似乎无法让它工作。它似乎没有进入AjaxButton的onSubmit方法。其他一切都正常工作,每个组件都正确呈现,并且当页面加载时,dataTable中填充了正确的数据,但是当我单击按钮时,什么也没有发生 任何帮助都将不胜感激。下面是我的代码的样子: 数据表: public SubscriberPage(PageParameters pa

我想根据表单的内容更改DataTable的内容(将其视为搜索栏功能)。我曾经在wicket 1.5.x中这样做,但在wicket 6.0.0-beta2中,我似乎无法让它工作。它似乎没有进入AjaxButton的onSubmit方法。其他一切都正常工作,每个组件都正确呈现,并且当页面加载时,dataTable中填充了正确的数据,但是当我单击按钮时,什么也没有发生

任何帮助都将不胜感激。下面是我的代码的样子:

数据表:

public SubscriberPage(PageParameters parameters) { 
super(parameters); 
add(new SearchForm("searchForm")); 

List<IColumn<Subscriber, String>> columns = new ArrayList<IColumn<Subscriber, String>>(); 
columns.add(new PropertyColumn<Subscriber, String>(new Model<String>("Telephone Number"), 
                                                   "tn", 
                                                   "tn")); 
[...] 
columns.add(new PropertyColumn<Subscriber, String>(new Model<String>("Initialized MB"), 
                                                   "initializedMB")); 

table = new AjaxFallbackDefaultDataTable<Subscriber, String>("table", 
                                                             columns, 
                                                             subscriberDataProvider, 
                                                             40); 
table.setOutputMarkupId(true); 
add(table); 
} 
publicsubscriberpage(PageParameters){
超级(参数);
添加(新搜索表单(“搜索表单”);
列表列=新的ArrayList();
添加(新属性)列(新型号(“电话号码”),
“tn”,
"tn);;
[...] 
columns.add(新属性column(新模型(“初始化MB”),
"首字母缩写b);;
table=新的AjaxFallbackDefaultDataTable(“表”,
柱,
订阅数据提供程序,
40); 
表.setOutputMarkupId(真);
增加(表);
} 
这是带有AjaxButton的表单:

private class SearchForm extends Form<String> { 
private static final long serialVersionUID = 1L; 

private String tnModel; 
private Label tnLabel = new Label("tnLabel", "Telephone Number :"); 
private TextField<String> tn; 

public SearchForm(String id) { 
  super(id); 
  tn = new TextField<String>("tnTextField", new PropertyModel<String>(this, "tnModel")); 
  tn.setOutputMarkupId(true); 
  add(tnLabel); 
  add(tn); 

  AjaxButton lSearchButton = new AjaxButton("searchButton") { 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
      SubscriberFilter filter = new SubscriberFilter(); 
      target.add(table); 
      if (!(tn.getValue() == null) && !tn.getValue().isEmpty()) { 
        filter.setTn(tn.getValue()); 
      } 
      // giving the new filter to the dataProvider 
      subscriberDataProvider.setFilterState(filter); 
    } 

    @Override 
    protected void onError(AjaxRequestTarget target, Form<?> form) { 
      // TODO Implement onError(..) 
      throw new UnsupportedOperationException("Not yet implemented."); 
    } 

  }; 
  lSearchButton.setOutputMarkupId(true); 
  this.setDefaultButton(lSearchButton); 
  add(lSearchButton); 
} 
} 
私有类SearchForm扩展了表单{
私有静态最终长serialVersionUID=1L;
私有字符串模型;
专用标签tnLabel=新标签(“tnLabel”,“电话号码:”);
私有文本字段tn;
公共搜索表单(字符串id){
超级(id);
tn=新文本字段(“tnTextField”,新属性模型(“tnModel”);
tn.setOutputMarkupId(真);
添加(tnLabel);
添加(tn);
AjaxButton lSearchButton=新建AjaxButton(“搜索按钮”){
私有静态最终长serialVersionUID=1L;
@凌驾
Submit上受保护的void(AjaxRequestTarget目标,表单){
SubscriberFilter=新的SubscriberFilter();
目标。添加(表);
如果(!(tn.getValue()==null)和&!tn.getValue().isEmpty()){
filter.setTn(tn.getValue());
} 
//将新筛选器提供给数据提供程序
subscriberDataProvider.setFilterState(过滤器);
} 
@凌驾
受保护的void onError(AjaxRequestTarget目标,表单){
//TODO实现onError(..)
抛出新的UnsupportedOperationException(“尚未实现”);
} 
}; 
lSearchButton.setOutputMarkupId(true);
此.setDefaultButton(lSearchButton);
添加(lsearch按钮);
} 
} 

需要将要刷新的组件添加到容器中。提交时,需要将容器添加到目标。这样您的组件将被刷新。比如:

WebMarkupContainer outputContainer = new WebMarkupContainer("searchResult");
outputContainer.setOutputMarkupId(true);
outputContainer.add(table);
add(outputContainer);

@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
    //change table ..... stuff ..... ...

    //refresh container
    target.add(outputContainer);
}


<div wicket:id="searchResult"></div>
WebMarkupContainer outputContainer=新的WebMarkupContainer(“搜索结果”);
setOutputMarkupId(true);
outputContainer.add(表);
添加(输出容器);
@凌驾
提交时受保护的void(AjaxRequestTarget目标,表单){
//换桌子……东西。。。
//刷新容器
target.add(outputContainer);
}

您是否测试了是否达到onSubmit()?通过调试消息或调试器?是的,正如我在问题中所说的,它没有到达onSubmit(),我不知道为什么…可能是这个票证相关:?(附带说明:您知道有6.0.0beta-3可用吗?)我认为这与此票据无关,因为它似乎与未执行ajax调用有关。可能有一些参数我没有为ajax调用正确设置(可能在本页提到的updateAjaxAttributes()中:)。现在我停止使用wicket 6.x,回到1.5.x,一切正常。beta3值得一试(感谢您提供的信息)表单是如何获得表格的?在上面的代码示例中,您并没有传递它,表也不是最终的