【问题标题】:wicket 6.0.0-beta2 Updating content of DataTable when submitting a form with AjaxButtonwicket 6.0.0-beta2 使用 AjaxButton 提交表单时更新 DataTable 的内容
【发布时间】:2012-07-21 21:51:27
【问题描述】:

我想根据表单的内容更改 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); 
} 

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

【问题讨论】:

  • 你是否测试过你是否到达了onSubmit()?通过调试消息或调试器?
  • 是的,正如我在问题中所说,它没有到达 onSubmit(),我不知道为什么......
  • 会不会是这张票是相关的:issues.apache.org/jira/browse/WICKET-4630? (附带说明:您知道有 6.0.0beta-3 可用吗?)
  • 我认为它与这张票无关,因为它似乎是未执行 ajax 调用的问题。可能有一些参数我没有为 ajax 调用正确设置(可能在本页提到的 updateAjaxAttributes() 中:cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax)。现在我停止使用 wicket 6.x 并回到 1.5.x 并且一切正常。 beta3 值得一试(感谢提供信息)
  • 表单如何获取表格?您没有通过它,并且表格在上面的代码示例中不是最终的

标签: ajax wicket-1.6 wicket-6


【解决方案1】:

您要刷新的组件需要添加到容器中。提交时需要将容器添加到target。这样你的组件就会被刷新。比如:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2018-09-02
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多