| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JSF : транзитивность request bean |
| Автор: v2v 25.4.2008, 01:17 |
| Есть три страници: create.faces , view.faces & edit.faces запускаю create.faces - и заполняю поля формы - создаю бин , при сабмите перехожу на view.faces и проверяю что всё заполнено правильно . что то не правильно жму кнопку edit и перехожу на edit.faces , но вот проблема. мой бин есть request scope и поэтому на третью страницу он не передаётся. Как это полечить? Вариант использовать для моего бина session scope не подходит , потому что если я после создания открою вторую страницу create.faces , то поля уже будут заполнены значениями первого бина. не катит. помогайте. это должно быть тривиальный вопрос, но я с jsf начал разбираться не так давно и сам хорошего решения пока не нашёл. |
| Автор: hanabi 25.4.2008, 03:07 |
| тривиальный ответ, ИМХО, такой - не открывать вторую страницу либо юзер занимается делом - заполняет форму, либо занимается фигней - типа открывает сто страниц на экране и любуется ими это ж application, а не веб-сайт |
| Автор: v2v 25.4.2008, 08:10 |
| ты не понял. я добавил пользователя . всё ок. нажал линк добавить нового пользователя, а там, при session scope для мого бина, уже заполнены поля ! это не правильно. |
| Автор: ivg 25.4.2008, 08:38 |
| Не много не понял точно в чем проблема, но если то, в чём я думаю, то вот несколько мыслей. Есть такая штука - MVC Так вот бины в JSF, по крайней мере те, что описываются в config-faces.xml - должны относится по моему убеждению к уровню Controller'а. А POJO классы, или Entity Beans в терминологии EJB, - классы описывающие модель предметной области - ими мы управляем сами в контроллере, а не отдаём движку JSF. Бины контроллера - это как бы программные модули, реализующие ту или иную функциональность (ещё это можно назвать бизнес-логикой), например Управление пользователями, здесь и create и edit и delete и т. д. Вот такую идеологию предлагаю помыслить |
| Автор: necromancer 25.4.2008, 13:52 |
| мда, а можно еще варианты: см 1 использовать сериализацию на странице 2 сохранять в сессии следующее: уникальный id сраницы или операции и связанные с ним объекты, по таймауту их убивать =) 3 использовать JBoss Seam 4 по моему у одного из дочерних проектов MyFaces есть Conversation 5 использовать PhaseListener для поддержания контектса страниц хранение в базе это гуд и не гуд гуд: масштабируемость надежная персистентность отказоустойчивать не гуд: не совсем понятно почему оно не покажет на отдельно открытой странице тоже что и на редактируемой =) см выше усложняет логику увеличивает накладные расходы необходимо отслеживать что бы временная таблица чистилась |
| Автор: Kangaroo 25.4.2008, 14:29 | ||
Я немного не то имел ввиду. Ты про временное хранилище (зачем?), а я про постоянное. Создали бин, сохранили его куда-нибудь (в базу, например), для апдейта - достали его и базы. Зачем делать это конвесейшном? |
| Автор: v2v 25.4.2008, 15:31 | ||
| ivg, теорию мы знаем , как это реализуется на практике ;) . necromancer, поподробней про 4 и 5.
Kangaroo, тут есть запросы к базе без которого можно было бы обойтись ... хотелось бы обойтись ... и средства jsf должны позволять это . разве тут нету людей которые активно пользуются jsf ?? |
| Автор: v2v 25.4.2008, 17:07 |
| решил эту проблемку, так как хотел изначально : просто и красиво проблема была в странице view.jsp , дело в том что вместо полей для ввода h:inputText бин.вальюе там стояло поле вывода : h:outputText бин.вальюе ясное дело что значения с таких полей дальше не передаются, значит надо было добавить поля для ввода и спрятать их , на выручку пришёл компонент h:inputHidden бин.вальюе , ко-им я и воспользовался. сабж решён. ждите новых вопросов в скором будущем. |
| Автор: alexsmirnov 26.4.2008, 03:44 |
| На самом деле, в JSF для такого случая подразумевается использовать не 3, а 2 страницы. create.faces - вводится информация и нажимается submit. Делается валидация. Если что-то не так, JSF заполняет сообщения и опять выводит create.faces. Если все OK - выводится следующая страница в том-же запросе. При ее отображении бин еще есть. |
| Автор: v2v 26.4.2008, 16:51 |
| alexsmirnov, это всё само собой разумеется ;) но страница где можно редактировать заполненные данные тоже имеет право на существование. |