Перенаправление калитки: как передать параметры и сохранить URL "красивыми"? - PullRequest
5 голосов
/ 11 ноября 2010

Рассмотрим веб-страницу Wicket, которая перенаправляет на другую страницу (основываясь на некоторой логике, опущенной здесь):

public class SomePage extends WebPage {
    public SomePage(PageParameters parameters) {
        setResponsePage(AnotherPage.class);
        setRedirect(true);
    }
}

Мне нужно передать параметры PageParameters на эту другую страницу, и, похоже, именно такчтобы сделать это:

setResponsePage(new AnotherPage(parameters));

Однако, при создании нового объекта Page, подобного этому, я получаю URL-адрес, такой как /?wicket:interface=:1:::: вместо чистого /another.Другая страница определена как:

@MountPath(path = "another")
public class AnotherPage extends WebPage {
    // ...
}

(Где MountPath из пакета org.wicketstuff.annotation.mount.)

Итак, мои вопросы:

  • Какой-то другой способ передачи параметров?
  • Какой-нибудь способ сохранить красивый URL?Вышеупомянутое ограничение Wicket Stuff вместо основного Wicket?

Обновление

Хех, получается любой из предложенных подходов работает, и также , что я изначально пробовал - setResponsePage(new AnotherPage(parameters)) -пока я удаляю setRedirect(true).В этом случае URL остается прежним (путь к SomePage), и Я только что понял Я действительно должен был с самого начала упомянуть, что все в порядке, если это так (пока это "красиво" ипараметры переданы)!

Страница («SomePage») отправляет запросы на основе параметров запроса на пару возможных страниц результатов, которые выглядят по-разному, но к которым обращаются по одному и тому же URL.Я пытался сформулировать вопрос как можно более универсальным и минималистским, но это пошло не так, как я пропустил соответствующую информацию.: - /

Извините, если это оказалось странным, неясным или бесполезным для других.Если у вас есть предложение о его переименовании, не стесняйтесь комментировать.

Ответы [ 4 ]

5 голосов
/ 11 ноября 2010

seanizer имеет правильную идею, но просто для полноты, есть больше опций, чем BookmarkablePageRequestTargetUrlCodingStrategy и HybridUrlCodingStrategy:

4 голосов
/ 11 ноября 2010

Я думаю, что ключевая фраза на этой справочной странице такова:

Следующий шаг - определить, какую стратегию кодирования URL использовать. Если не указано иное, используется значение по умолчанию BookmarkablePageRequestTargetUrlCodingStrategy. В приведенном выше примере на странице «Условия» используется значение по умолчанию.

Я думаю, вам нужно смонтировать другую стратегию кодирования URL, вероятно, что-то вроде HybridUrlCodingStrategy.

Изменить: вам, вероятно, просто нужно добавить эту аннотацию, чтобы сделать это:

@MountMixedParam(parameterNames={"param1", "param2"})
3 голосов
/ 15 ноября 2010

Возможно, другой метод setResponsePage в Компоненте ближе к тому, что вы хотите:

/**
 * Sets the page class and its parameters that will respond to this request
 * 
 * @param <C>
 * 
 * @param cls
 *            The response page class
 * @param parameters
 *            The parameters for this bookmarkable page.
 * @see RequestCycle#setResponsePage(Class, PageParameters)
 */
public final <C extends Page> void setResponsePage(final Class<C> cls, PageParameters parameters)
{
    getRequestCycle().setResponsePage(cls, parameters);
}
1 голос
/ 15 ноября 2010

Я успешно использовал это из обработчика onClick, но пока не уверен, будет ли он работать и из конструктора:

getRequestCycle().setRequestTarget(new BookmarkablePageRequestTarget(ReportPage.class, params));
...