Самостоятельная обработка форм, PRG, валидация - PullRequest
2 голосов
/ 12 сентября 2009

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

В основном, когда вы публикуете, у вас есть состояние формы (в качестве параметров публикации). Однако, если вы проверяете и перенаправляете обратно в форму, вы теряете свое состояние формы (ваше перенаправление - это GET; вы можете закодировать все параметры формы в GET, но это не всегда возможно из-за ограничений длины URL. Кроме того, это выглядит уродливый как ад).

Я думаю о следующем:

  1. Пользователь в форме представления (/addUserDetails.html)
  2. POST для URL действия (/addUser)
  3. /addUser выполняет соответствующее действие. Если происходит сбой, он сохраняет состояние формы, присваивает ему идентификатор и перенаправляет на представление формы, используя идентификатор в качестве параметра get (/addUserDetails.html?state=2313ab2)
  4. Представление проверяет состояние и отображает соответствующую информацию

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

Мысли? Кроме того, существует ли какая-либо веб-инфраструктура Java, которая делает это или может быть принуждена к выполнению этого?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2009

Вам не нужно хранить все состояния в URL перенаправления. Я сделал это немного отличается от вашего подхода, и он отлично работает для нашего варианта использования.

Я не перенаправляю, если форма не проходит проверку. Я просто заново заполняю форму введенными значениями с выделенными ошибками, в точности, как если бы вы работали без PRG. Только после успешного завершения POST я перенаправляю браузер на страницу GET. В вашем случае вам нужно только указать имя пользователя в URL, чтобы вы могли отобразить персональную страницу приветствия.

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

1 голос
/ 12 сентября 2009

Попробуйте Wicket - он делает это по умолчанию.

...