wicket 6.0.0-beta2使用AjaxButton提交表单时更新DataTable的内容
我想根据表单的内容更改DataTable的内容(将其视为搜索栏功能)。我曾经在wicket 1.5.x中这样做,但在wicket 6.0.0-beta2中,我似乎无法让它工作。它似乎没有进入AjaxButton的onSubmit方法。其他一切都正常工作,每个组件都正确呈现,并且当页面加载时,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
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值得一试(感谢您提供的信息)表单是如何获得表格的?在上面的代码示例中,您并没有传递它,表也不是最终的