gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:29:49 25 4
gpt4 key购买 nike

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

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

数据表:

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);
}

这是带有 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);
}
}

最佳答案

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

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>

关于ajax - wicket 6.0.0-beta2 使用 AjaxButton 提交表单时更新 DataTable 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com