2012-07-23 24 views
10

Tôi muốn thay đổi nội dung của một DataTable tùy thuộc vào nội dung của biểu mẫu (nghĩ về nó dưới dạng chức năng của thanh tìm kiếm). Tôi sử dụng để làm điều đó trong wicket 1.5.x nhưng tôi dường như không thể làm cho nó hoạt động trong wicket 6.0.0-beta2. Nó dường như không nhập vào phương thức onSubmit của AjaxButton. Mọi thứ khác hoạt động tốt, mọi thành phần hiển thị chính xác và dataTable được lấp đầy với dữ liệu chính xác khi tải trang, nhưng khi tôi nhấp vào nút, không có gì xảy ra.wicket 6.0.0-beta2 Cập nhật nội dung của DataTable khi gửi biểu mẫu với AjaxButton

Mọi trợ giúp sẽ được đánh giá cao. Đây là những gì đang nhìn tôi như:

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

và đây là hình thức với 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); 
} 
} 
+0

Bạn có kiểm tra xem bạn có đạt được onSubmit() không? Qua thông báo gỡ lỗi hoặc trình gỡ lỗi? – bert

+0

Vâng, như tôi đã nói trong câu hỏi của tôi, nó không đạt đến onSubmit() và tôi không biết tại sao ... – jrochette

+0

Có thể là vé này có liên quan: https://issues.apache.org/jira/browse/WICKET-4630? (Trên một mặt lưu ý: bạn biết rằng có 6.0.0beta-3 có sẵn?) –

Trả lời

0

Các thành phần mà bạn muốn làm mới cần phải được bổ sung trong một container. Khi bạn gửi, vùng chứa cần được thêm vào mục tiêu. Bằng cách này, các thành phần của bạn sẽ được làm mới. Một cái gì đó như:

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> 
Các vấn đề liên quan