2013-09-14 6 views
5

Предположим, у меня есть два метода контроллера: Users.preInsert и Users.insert. Метод preInsert - это тот, который используется для отображения формы ввода пользователя (GET), тогда как метод insert отвечает за фактическую установку (POST) или вызывает услугу «вставить». Вот как выглядит маршруты как:Как реализовать POST-REDIRECT-GET в Play Framework

GET /users/add       controllers.Users.preInsert(...) 
POST /users/add       controllers.Users.insert(...) 

Так как же перенаправить запрос (POST на GET) без потери параметров, как сообщения об ошибках, возвращенных из службы вставки и значения занесено клиентом так, чтобы они могут быть доступны и отображены в форме ввода. Параметры могут включать некоторые сложные объекты. Я реализовал его с использованием API кеширования, но мне хотелось бы знать, есть ли у него лучшие способы сделать это.

+0

Вы должны использовать сеансы, а не кешировать. –

+0

@LorenzMeyer вы можете хранить только строковые значения в сеансах –

+1

Извините, я думал в PHP, а не в Java. Но вы не можете сериализовать свои данные? –

ответ

2

Это точная цель объектов Form (http://www.playframework.com/documentation/2.1.1/ScalaForms).

И я думаю, что есть ошибка в вашем routes, это может выглядеть следующим образом:

GET /users/add       controllers.Users.preInsert(...) 
POST /users/add       controllers.Users.insert(...) 

Вы должны окончательно взглянуть на form sample.

+0

Спасибо за указание на ошибку. Теперь я исправлен. О формах, да, я также использовал их вместе с API-интерфейсом Cache. –

+0

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

0

Вам не нужно перенаправить его обратно к preInsert действию, а не в начале insert проверки, если форма содержит ошибки, и она имеет вид отображения, содержащий вид (же, использованные в preInsert) , Он описан в разделе doc mentioned by nico_ekito в разделе Обработка сбой связи

+1

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

+0

... но любая форма HTML НЕ подлежит обновлению - если пользователь обновит представление, он отобразит GET маршрут с действием 'preInsert' и пустой формой - и это довольно очевидное поведение. – biesior

Смежные вопросы