|
|
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Web-приложение, основанное на сервлетах. Использую стандартный способ редактирования записи. Одна из JSP-страниц реализует форму для редактирования записи: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. По сабмиту срабатывает сервлет, который анализирует информацию. Тут возникает исключение (изз-за некорректных данных, дублирования записи, ошибки доступа и т.д.), и сервлет отправляет на страницу с сообщением об ошибке. Пользователь понимает суть ошибки и возвращает предыдущую страницу с формой, чтобы сделать исправления. Но получается, что все его изменения не сохраняются и ему снова приходится вводить кучу input-полей. Как при таком подходе восстанавливать изменения, сделанные пользователем? Может есть другой способ? Заранее благодарен С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 10:28:56 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Struts ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 10:48:11 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Спасибо. Я поверхностно знакомился со Struts и понял, что они больше предназначены для анализа введенных данных. Это так? А если с данными все в порядке и при изменении записи возникает DuplicateKeyException или SQLException? Такую проверку можно запихать в Struts? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 11:07:21 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
в него можно всё запихать но это конечно не валидация ... action может выполнять обновление базы, ловить exception, добавлять Message c ошибкой и снова форвардить на себя, в этом случае форма прибиваться не должна - значения должны остаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 11:38:46 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Спасибо. Попробую применить струтс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 11:49:40 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
wicket ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 12:44:28 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
- а сессии не пробовали использовать? - если выводить сообщение об ошибке на той же странице что и форма, то и сессии не нужны :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 13:26:51 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Leonidvwicket ;) А что это такое и с чем его едят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 14:50:18 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Kachalov- а сессии не пробовали использовать? Сессии активно использую, но в этом случае нет. Думал, что есть вариант менее затратный. Kachalov- если выводить сообщение об ошибке на той же странице что и форма, то и сессии не нужны :) Т.е. я должен предусмотреть на странице с формой область для вывода текста ошибок, а затем ее обновлять после сабмита? Пока не представляю, как обновить только область страницы, а не всю. Никогда этого не делал. Если можно, выложите примерчик. Или дайте ссылку. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 14:57:06 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Semen Popov Leonidvwicket ;) А что это такое и с чем его едят? И Struts, и Wicket это фреймворки для создания WEB-приложений на Java. Проблемы валидации данных в них решаются очень легко и изящно. Писать на голом JSP - изобретать велосипед для решения этих проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 15:11:15 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Semen PopovТ.е. я должен предусмотреть на странице с формой область для вывода текста ошибок, а затем ее обновлять после сабмита? Пока не представляю, как обновить только область страницы, а не всю. Никогда этого не делал. Если можно, выложите примерчик. Или дайте ссылку. Спасибо. Я использую шаблон Model 2 и в случае ошибки обработки пришедших данных (происходит в controller-е) показываю примерно такую страницу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Файл "errors.jspf" может выглядеть по разному в зависимости от того как Вы храните сообщения о произошедших ошибках. У меня сообщения лежат в массиве и вывод выглядит примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 15:16:22 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
LeonidvИ Struts, и Wicket это фреймворки для создания WEB-приложений на Java. Спасибо. Почитаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 15:23:38 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
KachalovЯ использую шаблон Model 2 и в случае ошибки обработки пришедших данных (происходит в controller-е) показываю примерно такую страницу: <body> ... <%@include file="errors.jspf"%> ... Спасибо. JSPF - это случаем не JSP Fragment? До этого момента не представлял, как он может использоваться. Насчет хранения ошибок и их представления понятно. Только я все равно не догоняю, как в страницу, которую Вы показываете в случае ошибки попадают сделанные пользователем изменения информации? Из "request.getParameter("f1")" что ли? Я понимаю, что есть JSP-форма. Одним фрагментом кода этой JSP является "<%@include file="errors.jspf"%>" - область для вывода ошибок. Когда пользователь вызывает форму, например для добавления записи, фрагмент errors.jspf пустой. После нажатия на сабмит происходит обработка в контроллере, в результате которой должна отобразиться (методами *.forward(req, resp); или *.sendRedirect(url);) эта же JSP-форма или уже другая JSP? Если эта же, то суть не меняется. Мы получим голую форму(без изменений пользователя), но с областью ошибок. Я скорее чего-то недопонимаю, так что поправьте меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 15:54:05 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Semen PopovJSPF - это случаем не JSP Fragment? - да. Но никто не мешает обозвать подключаемый файл errors.jsp Semen Popov как в страницу, которую Вы показываете в случае ошибки попадают сделанные пользователем изменения информации? Из "request.getParameter("f1")" что ли? - да. Если я правильно понял то что Вы хоите сделать - это при ошибочном вводе, показ формы поля которой уже заполнены данными введенными на предыдущем этапе? Semen Popov Я понимаю, что есть JSP-форма. Одним фрагментом кода этой JSP является "<%@include file="errors.jspf"%>" - область для вывода ошибок. Когда пользователь вызывает форму, например для добавления записи, фрагмент errors.jspf пустой. - я использую шаблон Model 2, в котором контроллер сообщает диспетчеру запросов какое View показывать. Грубо говоря есть три JSP-страницы: 1-я просто форма, 2-я форма с выводом данных на случай ошибки и 3-я страница с сообщением что данные успешно добавлены. Но из экономии можно 1-ю и 2-ю страницы объеденить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 16:11:59 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Kachalov- да. Если я правильно понял то что Вы хоите сделать - это при ошибочном вводе, показ формы поля которой уже заполнены данными введенными на предыдущем этапе? Именно так. Но только мне нужен не просто показ, но и сохранить функциональность показанной в результате ошибки формы, т.е., чтобы пользователь мог так же выполнять сабмит и в этой форме. Kachalov- я использую шаблон Model 2, в котором контроллер сообщает диспетчеру запросов какое View показывать. Грубо говоря есть три JSP-страницы: 1-я просто форма, 2-я форма с выводом данных на случай ошибки и 3-я страница с сообщением что данные успешно добавлены. Но из экономии можно 1-ю и 2-ю страницы объеденить. Что-то проглядывается. 1 JSP - это та форма, что я имею сейчас: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 1 и 2 можно объединить в одну, тогда один из фрагментов кода первой формы Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 17:12:54 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Semen Popov Конструкцию if можно навесить на весь блок <FORM>. Верно? - можно, также можно воспользоваться условным операторм, примерно так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 17:34:18 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2007, 17:40:27 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Kachalov- тоько появляется дополнительная логика, которая усложняет View, а это не есть хорошо А у меня вот такая идея назрела. Можно обойтись только второй JSP с формой. На странице со списком записей пользователь вызывает ссылку "Изменить": Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Проблема, возможно, будет в несоответствии логики форматирования данных в JSP и при ручном кодировании. Я, например, 100%-но еще не знаю как в JSP-инпутах преобразуются данные различных типов. Ведь value инпута - это строковое значение, а пихнуть мы туда можем значение любого типа. Насколько такой вариант правильный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 09:27:55 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
- такой вариант плох тем, что он усложняет структуру взаимодействия View и Controller-а. Мне кажется логика их взаимодействия должна быть совершенно одинаковой для всех страниц сайта, в противном случае потом придется долго вспоминать, где и что делается. Но тут Вам решать. Прежде чем что то делать советую ознакомится (хотя бы в общих чертах) с логикой и принципами работы популярных у web-разработчиков фреймворков (типа Struts и т. п.), это позволит почерпнуть здравые идеи и более разумно организовать собственный код - по вводу данных и их отображению: все что пользователь отправит через поля формы - это строки (единственное исключение это тэг input типа file, но это в любом случае отдельная песня), соответственно никаких проблем с выводом полученных от клиента данных назад в форму быть не должно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 11:59:48 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Kachalov - по вводу данных и их отображению: все что пользователь отправит через поля формы - это строки (единственное исключение это тэг input типа file, но это в любом случае отдельная песня), соответственно никаких проблем с выводом полученных от клиента данных назад в форму быть не должно да кстати, а как поступать с файлами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 13:06:22 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
LINUXER да кстати, а как поступать с файлами? - как правило никак (можно увидеть в большинстве сайтов). Иногда если файл успешно загрузился а ошибка произошла в каком то другом поле, выводят чекбокс "заменить" рядом с полем для ввода файла. Если клиент не поставит галочку, то сохраняется уже загруженый ранее файл, а если поставит, то файл либо удалится, либо будет заменен новым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 13:17:53 |
|
||
|
Восстановить информацию в форме после неудачного сабмита
|
|||
|---|---|---|---|
|
#18+
Kachalov - такой вариант плох тем, что он усложняет структуру взаимодействия View и Controller-а. Мне кажется логика их взаимодействия должна быть совершенно одинаковой для всех страниц сайта, в противном случае потом придется долго вспоминать, где и что делается. Но тут Вам решать. Прежде чем что то делать советую ознакомится (хотя бы в общих чертах) с логикой и принципами работы популярных у web-разработчиков фреймворков (типа Struts и т. п.), это позволит почерпнуть здравые идеи и более разумно организовать собственный код В моем случае этот вариант сработает, но, конечно, необходимо следовать общим принципам web-программирования. Поэтому буду придерживаться рекомендациям специалистов. К сожалению, не всегда это удается, поскольку мало времени, и иногда на ум приходят совершенно бредовые, но рабочие рабочие идеи. Kachalov - по вводу данных и их отображению: все что пользователь отправит через поля формы - это строки (единственное исключение это тэг input типа file, но это в любом случае отдельная песня), соответственно никаких проблем с выводом полученных от клиента данных назад в форму быть не должно Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2007, 14:45:45 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2145733]: |
0ms |
get settings: |
15ms |
get forum list: |
27ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
52ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 290ms |
| total: | 503ms |

| 0 / 0 |
