Компоненты не перезагружаются при изменении URL в Wicket 1.5 (.2)? - PullRequest
3 голосов
/ 10 ноября 2011

Я впервые перехожу к своему приложению со следующим URL:

... / Главная /? 0 & пользователь = х

В режиме отладки я вижу, что калитка прекрасно создает экземпляры моих панелей и тому подобное (очевидно).

если я изменю URL на:

... / Главная /? 0 & пользователь = у

тогда ничего не происходит, панели не инициализируются повторно (для нового пользователя => данные пользователя x по-прежнему отображаются), равно как и LoadableDetachable -или другие модели.

Однако, если я изменю URL-адрес на:

... / Главная /? 1 & пользователь = у

тогда все панели хорошо инициализируются для пользователя y

Еще один шаг, если вы измените URL обратно на

... / Главная /? 0 & пользователь = у

, затем снова отображаются данные для пользователя x .

Кажется, что Wicket не заботится об изменении аргументов в URL, чтобы решить, нужно ли перезагружать компоненты. AFAIK это работало нормально в калитке 1.4. Я думаю, что понимаю логику этого поведения, но не уверен. Кроме того, я хотел бы знать, как заставить Wicket перезагружаться, если изменяются пользовательские параметры, и как удалить этот «уродливый»? 0 из URL (если возможно)?

Ответы [ 3 ]

5 голосов
/ 10 ноября 2011

Это состояние Wicket.Страница создается один раз, параметры анализируются и так далее.Позже вы передаете различные параметры уже созданной странице, но на этот раз ее конструктор вообще не вызывается, и, таким образом, параметры страницы не обновляются.При изменении значения? 1 запрашивается Wicket для страницы с идентификатором 1, и, поскольку таких Wicket нет, создается новый экземпляр и передаются новые параметры.Если вы хотите всегда иметь самые последние параметры запроса, используйте getRequest (). GetRequestParameter ("user"), который даст вам то, что вам нужно.Имеет смысл?

2 голосов
/ 13 ноября 2011

Чтобы изменить ответ martin-g: вам нужно получить параметр запроса в вашей модели и получить правильного пользователя с параметром запроса.Что-то вроде:

setModel(new LoadableDetachableModel<User>(){
    public User load() {
        String username = getRequest().getRequestParameter("user");
        return userservice.byUsername(username);
    }
}));

Когда вам нужны динамические данные, почти всегда используйте модели для решения вашей проблемы.

0 голосов
/ 28 марта 2013

Я думаю, вы можете использовать onRender или onConfigure

...