powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts: Заполнение формы данными из БД для их изменения
19 сообщений из 19, страница 1 из 1
Struts: Заполнение формы данными из БД для их изменения
    #33696443
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Недавно начал только со Стратсами разбираться и наткнулся на одну проблемку, хочется понять как это правильно организовать.

В общем, нужно изменить данные в БД. Но для этого их сначала нужно отобразить на JSP-шке, к которой подключены ActionForm и какой-то Action изменяющий эти данные.

Придумал два метода для их отображения:

1. В конструкторе ActionForm вытягивать из БД данные и присваивать их переменным, которые связаны с полями на странице.

2. Сделать еще один Action, на который будет вести ссылка. Этот Action создаст бин, заполнит его и передаст JSP.

Хотелось бы узнать какой же способ более правильный и и вообще, как кто с этим справляется. Может есть более удобная альтернатива?
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697096
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHA wrote:
> Придумал два метода для их отображения:
>
> 1. В конструкторе ActionForm вытягивать из БД данные и присваивать их
> переменным, которые связаны с полями на странице.
>
> 2. Сделать еще один Action, на который будет вести ссылка. Этот Action
> создаст бин, заполнит его и передаст JSP.


Голосую за второй:) Дополнительно неплохо бы исключить возможность обращения к
соответствующей JSP напрямую, пока не отработал предварительный Action.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697334
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, кажется, для этого есть метод ActionForm.reset()?
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697401
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некрасиво бизнесс логику приложения в ActionForm применять. Для этого сущ. Action классы.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697510
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоННекрасиво бизнесс логику приложения в ActionForm применять. Для этого сущ. Action классы.

struts-docSince Struts 1.1, the form tag also calls reset on the ActionForm if it creates the object itself.
Так почему бы не использовать такой автоматизм для заполнения формы? И потом: какая ещё бизнес логика? ActionForm, у нас к примеру, - это просто data buffer between db and jsp.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697616
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уже показана JSP-страница и на ней сделан submit формы, то опять будет
вызван ActionForm.reset() Придется разруливать ситуацию, разбирая, что именно
сейчас происходит? Еще: допустим, при получении данных ты хочешь сделать
редирект куда-то, например, сообщить пользователю, что от не имеет права видеть
эти данные. В Action.execute() ты можешь вернуть mapping.findForward(), в форме
придется делать иначе.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697626
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть статья одна по этому поводу, ссылку и автора невспомню. В кратце, ActionForm должна использоваться для валидации данных полученных от клиента, записи в бин. Подключение, выполнение запросов, ... должно выполняться в Action классе и только в нем.

Спорить с вами нестану, но я бы так делать нестал.
2 вариант.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697690
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Если уже показана JSP-страница и на ней сделан submit формы, то опять будет
вызван ActionForm.reset() Придется разруливать ситуацию, разбирая, что именно
сейчас происходит? Еще: допустим, при получении данных ты хочешь сделать
редирект куда-то, например, сообщить пользователю, что от не имеет права видеть
эти данные. В Action.execute() ты можешь вернуть mapping.findForward(), в форме
придется делать иначе.
Posted via ActualForum NNTP Server 1.3

При submit'e будет снова вызван ActionForm.reset()? Денис, ты что то путаешь или я не понял. Ничего разруливать там не надо (мне не приходится, например!)
Не буду говорить от себя:
Pro Jakarta Struts, Second Edition John Carnell and Rob Harrop
Prepopulating an ActionForm with Data
So far, we have talked about using the reset() method to ensure that the contents of an ActionForm class are cleared before the ActionServlet places data in it from the user request. However, an ActionForm class can also be used to prepopulate an HTML form with data. The data populating the form might be text information retrieved from a properties file or a database.


Секьюрити и ActionForm.reset вообще не связаны. Пусть секьюрити лежит как и лежала на плечах Action. Или я опять ничего не понял и ты намекаешь на Action chaining?
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697778
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riman
При submit'e будет снова вызван ActionForm.reset()? Денис, ты что то путаешь или
я не понял. Ничего разруливать там не надо (мне не приходится, например!)


Насчет вызова reset() при создании формы тегом (так я понял?) - это я упустил. А
при sumbit'е - как же тогда разруливается ситуация со сброшенными checkbox'ами?
У меня есть ActionForm, в сессии, на JSP элемент checkbox, не выставлен. Для
того, чтобы это коннектно обработать, я в reset() скидываю их все. А потом
приходит request с нужными параметрами.

The data populating the form might be text information retrieved from a
properties file or a database.

Это здорово, что он так умеет. (2K1RUHA: тогда уже действительно, не "В
конструкторе ActionForm вытягивать из БД данные" а в методе reset()). Можно
предварительно инициализировать форму только в Action'е, можно и в Action'е, и в
самой форме. Это действительно вопрос идеологии: я делаю все в Action'е, будучи
уверенным, что форма ничего сама не заполняет, ты используешь оба подхода.
Припрет - я буду использовать тоже:)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697856
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Насчет вызова reset() при создании формы тегом (так я понял?) - это я упустил. А
при sumbit'е - как же тогда разруливается ситуация со сброшенными checkbox'ами?
У меня есть ActionForm, в сессии, на JSP элемент checkbox, не выставлен. Для
того, чтобы это коннектно обработать, я в reset() скидываю их все. А потом
приходит request с нужными параметрами.
Вот именно - при создании формы тегом происходит вызов метода reset(), а не после нажатия submit на форме. Именно поэтому при создании формы и делают сброс всех галок для checkbox'ов в методе reset() - just in case of
автор
The reset() method was originally implemented to allow developers to deal with one of the more annoying HTML form controls: checkboxes. When a form is submitted with unchecked checkboxes, no data values are submitted for the checkbox control in the HTTP request.

Thus, if an ActionForm is sitting in the user's session and the user changes a checkbox value for the ActionForm from true to false, the ActionForm will not get updated because the value for the checkbox will not be submitted. Remember, the HTML <input> tag does not send a value of false on an unchecked checkbox.


А вообще:
автор
A Word on the reset() Method
Among Struts developers the use of the reset() method to prepopulate form data can be the cause of rigorous debate. The Struts JavaDoc advises to not use the reset() method. The main reason the Struts development team gives is that the reset() method maybe deprecated at some point in the future (even though this has yet to be even mentioned anywhere).


т.е. мы нарвались на маленькую holly war.
PS: Просмотрев тут несколько кусков кода заметил, что у нас используется и "метод 2" и reset() method.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33697922
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riman
Вот именно - при создании формы тегом происходит вызов метода reset(), а не после нажатия submit на форме. Именно поэтому при создании формы и делают сброс всех галок для checkbox'ов в методе reset() - just in case of

У меня форма в сессии , я ее не создаю каждый раз, до вывода JSP и отработки тега она точно есть. И все равно reset() вызывается, по крайней мере все работает:)
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698030
andrews answer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТимоНЕсть статья одна по этому поводу, ссылку и автора невспомню. В кратце, ActionForm должна использоваться для валидации данных полученных от клиента, записи в бин. Подключение, выполнение запросов, ... должно выполняться в Action классе и только в нем.

Если я правильно ошибаюсь, стратсы рулят в претворении идей MVC в массы )
(ActionForm + jsp) - это View
Action, DispatchAction и иже с ними - Controller
A Model - это сама бизнес-логика (DAO, DTO, PO....)

Соответсно правильные парни работают с базой из Model layer ;)
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698051
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю автор именно это пытался донести до читателя.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698366
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил попробовать 2 способа, чтобы выяснить на практике все за и против.

Возникли некоторые проблемки. По первому методу: данные БД беру в reset’e, в принципе все работает, НО если не ввести какой-то обязательный параметр, выводится сообщение об этом, а потом уйти с этой страницы и снова зайти, то отобразятся последние неправильные данные. Это как-нибудь лечиться?

Второй вроде работает, и мне он даже больше понравился, но не нравится, что к одной странице вешается 2 Action’а и еще ActionForm. Мое ИМХО, что это уже слишком большое разделение MVC.

Денис Попов, Вы тоже используете 2 Action’a или может делаете проверку в execute?
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698420
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHA wrote:
> Денис Попов, Вы тоже используете 2 Action'a или может делаете проверку в
> execute?

У меня есть прецеденты, когда Action один и он окаймляет JSP с обеих сторон. От
некоторых из них я мечтаю избавился, потому что чем сложнее бизнес-логика, тем
труднее разбираться в одном Action'е что конкретно требуется в данный момент,
подготовить форму для показа или обработать пришедшие результаты. ИМХО лучше
разнести. Ты об этом?

Большинство проверок у меня в Action.execute() того второго Action'а, если что
не так: возвращаю mapping.findForward() и попадаю опять на JSP.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698488
riman.m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//уйти и снова зайти.
а в маппинге scope какой? ставь request and feel lucky.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698582
andrews answer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K1RUHA
Второй вроде работает, и мне он даже больше понравился, но не нравится, что к одной странице вешается 2 Action’а и еще ActionForm. Мое ИМХО, что это уже слишком большое разделение MVC.


Смотри в сторону DispatchAction и параметра method:
например делаешь class YourEntityPerformer extends DispatchAction
в нем методы
edit-читаешь данные из БД, конвертишь их в форму, кладешь в реквест и вперед на jsp
save-получает управление по сабмиту твоей формы, берет данные, сохраняет их в БД (дергает DAO)
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698672
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
У меня есть прецеденты, когда Action один и он окаймляет JSP с обеих сторон. От
некоторых из них я мечтаю избавился, потому что чем сложнее бизнес-логика, тем
труднее разбираться в одном Action'е что конкретно требуется в данный момент,
подготовить форму для показа или обработать пришедшие результаты. ИМХО лучше
разнести. Ты об этом?

Большинство проверок у меня в Action.execute() того второго Action'а, если что
не так: возвращаю mapping.findForward() и попадаю опять на JSP.

Да, я как раз про это и спрашивал и в принципе пришел к такому же выводу, что и Вы: лучше разделять и властвовать, чем ковыряться в if'ах :) Спасибо за помощь.
...
Рейтинг: 0 / 0
Struts: Заполнение формы данными из БД для их изменения
    #33698673
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riman.m//уйти и снова зайти.
а в маппинге scope какой? ставь request and feel lucky.

Да, в этом и была вся беда.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts: Заполнение формы данными из БД для их изменения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]