Как контролировать отправку действия URL в форме Wicket? - PullRequest
4 голосов
/ 29 октября 2009

У меня есть веб-приложение для калитки со страницей, смонтированной на закладке с псевдонимом. Страница содержит объект формы с действием отправки.

Проблема в том, что хотя форма принадлежит странице, URL-адрес действия не содержит псевдоним страницы, а создан в зашифрованной форме действия калитки. Есть ли способ изменить это поведение, поэтому ссылка будет выглядеть как page_alias / submit ?

...
setRenderStrategy(IRequestCycleSettings.ONE_PASS_RENDER);
mountBookmarkablePage("/resetpwd", ResetPasswordPage.class); 
...
public ResetPasswordPage(final String id, final PageParameters parameters) {
    final Form form = new StatelessForm();
    form.add(new Button("submit") { 
     public void onSubmit() {
         ...
        });
 add(form);

Ответы [ 3 ]

3 голосов
/ 19 июля 2011

Если вы подклассом StatelessForm вместо Form, это займет у вас часть пути. Вместо того, чтобы иметь что-то вроде

действие = "MyApp / Калитка: интерфейс =: 1: eventEditor :: IFormSubmitListener ::"

со страницей, содержащей форму, смонтированной по закладному URL, вы получите что-то вроде, например,

действие = "MyApp / крепление / путь / некоторые / Титулы / Калитка: интерфейс =: 0: eventEditor :: IFormSubmitListener ::"

Используется MixedParamUrlCodingStrategy для крепления в WebApplication.init()

Затем вы можете переопределить encodeUrlInHiddenFields() для возврата true, что даст вам чистый URL в атрибуте action.

Однако все это на самом деле не меняет способ работы Wicket с формами, т.е. у вас все еще есть некоторые данные о состоянии Wicket в разметке клиента. Я полагаю, что причина такой сложности в том, что Wicket призван помочь вам создать веб-приложение, которое имеет состояние . Я заметил, что Wicket много чего делает (например, сравнивает отправленные значения формы с тем, что возвращают геттеры модели перед вызовом сеттеров) за кулисами, что я слишком мало знаю, чтобы чувствовать себя комфортно, просто вырезая его.

Вы можете использовать Wicket для предоставления веб-сервисов RESTful, хотя, как описано в этом сообщении в блоге . Существует также проект в коде Google под названием wicket-rest , который расширяет эту идею. Обратите внимание, что кажется, что это работает так же просто, как и потому, что просто никогда не использует весь компонент, основанный на построении пользовательского интерфейса.

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

1 голос
/ 04 декабря 2009

Вы можете скрыть большую часть запроса mumbo jumbo, используя HybridUrlCodingStrategy, например так:

mount(new HybridUrlCodingStrategy("/resetpwd", ResetPasswordPage.class));

Тогда при нажатии кнопки "Отправить", если вы не перенаправляете на новую страницу, URL-адрес изменится с

mysite.com / DocRoot / resetpwd

до

mysite.com / DOCROOT / resetpwd.1

или, если вы действительно хотите, чтобы это было mysite.com / DocRoot / resetpwd / submit , вы можете создать новую закладку, скажем ResetPasswordResult.class, установить для нее страницу ответа и смонтировать ее на " / RESETPWD / отправить "

Вы можете взглянуть на другие стратегии кодирования, чтобы узнать, подходит ли вам другая, которая подходит вам лучше: http://cwiki.apache.org/WICKET/url-coding-strategies.html

0 голосов
/ 19 ноября 2010

Вы можете взглянуть на http://day -to-day-stuff.blogspot.com / 2008/10 / wicket-extreme-compatibility-urls.html и попробовать адаптировать его для форм.

...