|
|
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Недавно начал только со Стратсами разбираться и наткнулся на одну проблемку, хочется понять как это правильно организовать. В общем, нужно изменить данные в БД. Но для этого их сначала нужно отобразить на JSP-шке, к которой подключены ActionForm и какой-то Action изменяющий эти данные. Придумал два метода для их отображения: 1. В конструкторе ActionForm вытягивать из БД данные и присваивать их переменным, которые связаны с полями на странице. 2. Сделать еще один Action, на который будет вести ссылка. Этот Action создаст бин, заполнит его и передаст JSP. Хотелось бы узнать какой же способ более правильный и и вообще, как кто с этим справляется. Может есть более удобная альтернатива? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 10:15 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
K1RUHA wrote: > Придумал два метода для их отображения: > > 1. В конструкторе ActionForm вытягивать из БД данные и присваивать их > переменным, которые связаны с полями на странице. > > 2. Сделать еще один Action, на который будет вести ссылка. Этот Action > создаст бин, заполнит его и передаст JSP. Голосую за второй:) Дополнительно неплохо бы исключить возможность обращения к соответствующей JSP напрямую, пока не отработал предварительный Action. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 12:39 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
А вообще, кажется, для этого есть метод ActionForm.reset()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 13:37 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Некрасиво бизнесс логику приложения в ActionForm применять. Для этого сущ. Action классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 13:54 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
ТимоННекрасиво бизнесс логику приложения в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:18 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Если уже показана JSP-страница и на ней сделан submit формы, то опять будет вызван ActionForm.reset() Придется разруливать ситуацию, разбирая, что именно сейчас происходит? Еще: допустим, при получении данных ты хочешь сделать редирект куда-то, например, сообщить пользователю, что от не имеет права видеть эти данные. В Action.execute() ты можешь вернуть mapping.findForward(), в форме придется делать иначе. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:39 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Есть статья одна по этому поводу, ссылку и автора невспомню. В кратце, ActionForm должна использоваться для валидации данных полученных от клиента, записи в бин. Подключение, выполнение запросов, ... должно выполняться в Action классе и только в нем. Спорить с вами нестану, но я бы так делать нестал. 2 вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:42 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:55 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 15:15 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 15:36 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
riman Вот именно - при создании формы тегом происходит вызов метода reset(), а не после нажатия submit на форме. Именно поэтому при создании формы и делают сброс всех галок для checkbox'ов в методе reset() - just in case of У меня форма в сессии , я ее не создаю каждый раз, до вывода JSP и отработки тега она точно есть. И все равно reset() вызывается, по крайней мере все работает:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 15:55 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
ТимоНЕсть статья одна по этому поводу, ссылку и автора невспомню. В кратце, ActionForm должна использоваться для валидации данных полученных от клиента, записи в бин. Подключение, выполнение запросов, ... должно выполняться в Action классе и только в нем. Если я правильно ошибаюсь, стратсы рулят в претворении идей MVC в массы ) (ActionForm + jsp) - это View Action, DispatchAction и иже с ними - Controller A Model - это сама бизнес-логика (DAO, DTO, PO....) Соответсно правильные парни работают с базой из Model layer ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 16:21 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Думаю автор именно это пытался донести до читателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 16:28 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Решил попробовать 2 способа, чтобы выяснить на практике все за и против. Возникли некоторые проблемки. По первому методу: данные БД беру в reset’e, в принципе все работает, НО если не ввести какой-то обязательный параметр, выводится сообщение об этом, а потом уйти с этой страницы и снова зайти, то отобразятся последние неправильные данные. Это как-нибудь лечиться? Второй вроде работает, и мне он даже больше понравился, но не нравится, что к одной странице вешается 2 Action’а и еще ActionForm. Мое ИМХО, что это уже слишком большое разделение MVC. Денис Попов, Вы тоже используете 2 Action’a или может делаете проверку в execute? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 18:09 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
K1RUHA wrote: > Денис Попов, Вы тоже используете 2 Action'a или может делаете проверку в > execute? У меня есть прецеденты, когда Action один и он окаймляет JSP с обеих сторон. От некоторых из них я мечтаю избавился, потому что чем сложнее бизнес-логика, тем труднее разбираться в одном Action'е что конкретно требуется в данный момент, подготовить форму для показа или обработать пришедшие результаты. ИМХО лучше разнести. Ты об этом? Большинство проверок у меня в Action.execute() того второго Action'а, если что не так: возвращаю mapping.findForward() и попадаю опять на JSP. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 18:31 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
//уйти и снова зайти. а в маппинге scope какой? ставь request and feel lucky. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 19:13 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
K1RUHA Второй вроде работает, и мне он даже больше понравился, но не нравится, что к одной странице вешается 2 Action’а и еще ActionForm. Мое ИМХО, что это уже слишком большое разделение MVC. Смотри в сторону DispatchAction и параметра method: например делаешь class YourEntityPerformer extends DispatchAction в нем методы edit-читаешь данные из БД, конвертишь их в форму, кладешь в реквест и вперед на jsp save-получает управление по сабмиту твоей формы, берет данные, сохраняет их в БД (дергает DAO) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 20:16 |
|
||
|
Struts: Заполнение формы данными из БД для их изменения
|
|||
|---|---|---|---|
|
#18+
Denis Popov У меня есть прецеденты, когда Action один и он окаймляет JSP с обеих сторон. От некоторых из них я мечтаю избавился, потому что чем сложнее бизнес-логика, тем труднее разбираться в одном Action'е что конкретно требуется в данный момент, подготовить форму для показа или обработать пришедшие результаты. ИМХО лучше разнести. Ты об этом? Большинство проверок у меня в Action.execute() того второго Action'а, если что не так: возвращаю mapping.findForward() и попадаю опять на JSP. Да, я как раз про это и спрашивал и в принципе пришел к такому же выводу, что и Вы: лучше разделять и властвовать, чем ковыряться в if'ах :) Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 22:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33696443&tid=2149417]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 498ms |

| 0 / 0 |
