Как создать обновляемую панель с помощью AjaxLink of Wicket? - PullRequest
0 голосов
/ 23 марта 2010

Я пытаюсь реализовать ссылку (на самом деле много ссылок), которая обновляет таблицу на веб-сайте, используя AjaxLink of Wicket. Но я терплю неудачу, таблица никогда не обновляется (у меня есть "setOutputMarkupId (true)" и вызываю "setDefaultModelObject" и "addComponent", но должно быть что-то другое, что не так).

Как реализовать панель с несколькими ссылками и таблицей, в которой отображаются динамические данные в зависимости от нажатой ссылки? Может кто-нибудь привести пример (может быть, две ссылки, при нажатии на первую из них в таблице отображаются два случайных числа от 1 до 10, а при нажатии на вторую в таблице отображаются случайные числа от 1 до 100)? Без перезагрузки всей страницы, но только HTML для таблицы?

Ответы [ 4 ]

3 голосов
/ 25 марта 2010

Одной из возможных причин может быть то, что вы используете не «обновляемую» модель, а скорее выбираете элементы списка и передаете их непосредственно компоненту, таким образом, список сериализуется в сеансе и не обновляется.

Если это так, передайте компоненту LoadableDetachableModel (который получает список в своем методе загрузки) компонент. Я не могу быть более конкретным, не увидев ваш код.

2 голосов
/ 25 марта 2010

Не думаю, что вы четко определили, что делаете.

Это две таблицы разных реализаций?Если это так, то ваш код верен - вы должны заменить старый компонент новым, а затем добавить новый в ответ ajax.

Реально, хотя, я думаю, у вас есть 1 компонент таблицыреализация.

То, что вам нужно сделать, выглядит примерно так:

public class RandomNumberListModel extends LoadableDetachableModel {
    private int upperBound;

    public RandomNumberListModel(int upperBound) {...}

    public void setUpperBound(int upperBound) {...}

    protected Object load() {
        // generate random number list using upper bound
        // return list
    }        
}

...

final MyTableComponent table = new MyTableComponent(new RandomNumberListModel(30));
add(table);    
AjaxLink link = new AjaxLink("myButton") {
    public void onClick(final AjaxRequestTarget target) {
        table.getModel().setUpperBound(100);
        target.addComponent(table);
    }
};
add(link);

(Правка) Я добавил динамическую модель многократного использования, чтобы проиллюстрировать, как она будет работать.Есть разные способы реализации этого, в зависимости от того, что вы хотите использовать повторно.Ключевым моментом является то, что модель генерирует список динамически, т. Е. Для каждого запроса, а верхняя граница диапазона номеров может управляться в обратном вызове onClick.

1 голос
/ 23 марта 2010

Существует один такой пример среди примеров wicketstuff.org, таблица дерево / дерево один. Три ссылки сверху меняют таблицу.

1 голос
/ 23 марта 2010

Как jboyd спрашивал, есть ли у вас код, который знает, что отправить содержимое таблицы обратно в ответ Ajax?:

final Component tableComponent = ....;
AjaxLink link = new AjaxLink("myButton"){
    public void onClick(final AjaxRequestTarget target) {
        target.addComponent(tableComponent);
    }
};
add(link);

Часть addComponent - это часть, на которую ссылается jboyd.

...