2012-04-17 3 views
2

Может ли Wicket разрешить передачу обоих следующих параметров в объекте PageParameters? Очевидно нет?Передача информационного сообщения на страницу калитки при использовании PageParameters

  • accountId который является показано в URL (/account/<ID>)
  • infoMessage параметр, который не показано в (bookmarkable) URL

Я в настоящее время использую IndexedHybridUrlCodingStrategy для страницы и просто попробуйте параметры «0» и «infoMessage» дает это исключение:

WicketMessage: не все параметры были закодированы. Убедитесь, что все имена параметров являются целыми числами в последовательном порядке, начиная с нуля. Текущие имена параметров: [0, InfoMessage]

Если изменить «InfoMessage» имя параметра в «1», она работает, но дает некрасивый URL (в данном случае что-то вроде /account/42/Tosite%20108207%20tallennettiin.5), который не то, что есть Я хочу.


Теперь, очевидный ответ, возможно, является то, что InfoMessage не должно быть в PageParameters. Но дело в том, я пытался добавить его в качестве нормального параметра конструктора вместо этого, например, так:

public AccountPage(PageParameters parameters, String infoMessage) { 
    // ... 
} 

Но этот подход не в одном важном прецеденте. После удаления постоянного объекта «Запись», связанного с учетной записью, следующее: не правильно загружает учетную запись (удаленная запись все еще видна). Этот код выполняется в onClick() AjaxFallbackLink.

setResponsePage(new AccountPage(AccountPage.pageParameters(account), message)); 

С другой стороны, мой оригинальный подход ...

setResponsePage(AccountPage.class, AccountPage.pageParameters(account)); 

... отлично работает, так как она каким-то образом загружает AccountPage "более тщательно", но, опять же, я не знать, как легко передать параметр infoMessage.

(AccountPage.pageParameters() выше простая статическая утилита для создания соответствующего PageParameters с «0» = счетом ид. Конструктор AccountPage всегда загружает учетную запись с сохранения с использованием идентификатора.)

Любых идей? Возможно, использование AjaxFallbackLink частично вызывает проблему?

Использование калитки 1.4.

ответ

4

Из того, что я вижу в вашем вопросе, вы пытаетесь отобразить страницу с закладкой и показывать пользователю сообщение с обратной связью (скорее всего, в FeedbackPanel), но вы не хотите, чтобы это сообщение являлось частью URL-адреса ,

Что вы хотите сделать, это сообщить Session, что у вас есть информационное сообщение, и пусть панель обратной связи обработает сообщение.

@Override void onSubmit() { 
    ... save object ... 
    getSession().info("Object ... has been saved"); 
    setResponsePage(ObjectPage.class, new PageParameters("id="+object.getId())); 
} 

В этом случае вы говорите Wicket временно хранить сообщения в сессии, пока она не визуализируется с помощью панели обратной связи. Эта идиома также известна как «флэш-сообщения».

Вы не можете использовать как PageParameters, так и другой параметр в качестве аргументов конструктора, поскольку Wicket не может создать экземпляр страницы с таким конструктором при запросе страницы. Wicket знает, как создавать экземпляры страниц со стандартными конструкторами или страницами с параметром PageParameters.

+0

Да, это именно то, что я пытался сделать; благодаря! Приятно, что сообщение, хранящееся с 'getSession(). Info()' автоматически получает панель обратной связи целевой страницы. – Jonik