![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Vassik |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Привет все)
В общем такая проблема, не могу правильно подсунуть коллекцию для тега <html:select>. Описываю, что происходит, есть у меня jsp страничка на которой в таблице представлен некий список, есть линка Edit после ее нажатия, я должен попасть на следующую страницу, которая содержит те же поля, но теперь в виде формы, чтобы можно было редактировать. В линке Edit у меня передаются всякие идентификаторы, чтобы необходимые данные можно было выбрать и заполнить поля формы. И на одной из строчке у меня ComboBox, который надо заполнить, некоторыми значениями выбранными из БД, вот с ним то и проблема, ексепшен вылетает, а теперь по шагам: Значит после нажатия на линку Edit, срабатывает вот такой вот ActionClass
в переменную list мы как раз возвращаем, список объектов, которые я хочу в combobox запузырить, в векторе находятся объекты вот такого бина
JSP моя выглядит вот таким вот образом
ну и он ругается, на то что я пытаюсь делать вот таким вот образом
Думал проблема в дом что я пытаюсь подсунуть ему вектор объектов, и он не может пробежаться по этой коллекции, по этому просто пробовал подсунуть один DataSubFaculBean объект, но ексепшен такой же:( Просмотрел примеры, а там в качестве бина, ActionForm используется и вообще не понятно как данные в select попадают, в сесию и реквест не добавляются, может пример просто мутный.... В общем то вопрос как мне правильно подсунуть данные в select ???? |
||||||||
|
|||||||||
BlackD |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
Я делал так:
JSP (register.jsp):
struts-config:
это если вместо бина использовать ActionForm. Но принцип должен быть похожим. |
||||||||
|
|||||||||
Vassik |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Ведь я по сути вроде тоже делаю, только коллекцию я свою в Action классе(LecturerInfEditAction) создаю, и пихаю ее в request
, а от туда по человечески забрать не могу:( Неужели чтобы с select работать, надо обязательно ActionForm юзать? И если тут однозначно ActionForm юзать, то как мне из моего Action класса(LecturerInfEditAction) параметры передать, которые я из реквеста достал.
Чере сессию что ли? Или можно пропихнуть дальше каким нить другим способом, может более гуманным? ![]() |
||||
|
|||||
BlackD |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
user - это имя моего бина (у меня это - ActionForm). Попробуй подставить имя своего.
у тебя вообще оно на бин не ссылается.
UserForm - имя моей ActionForm Это сообщение отредактировал(а) BlackD - 21.5.2007, 11:51 |
||||||||
|
|||||||||
Vassik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Какого именно, у меня мои бины хранятся в коллекция. Коллекция это lecturersHtit(это вектор состоящий из объектов вот такого типа DataSubFaculBean ), эту коллекцию я сую в request. ну я так понимаю этот код выполняется в методе validate, т.е после нажатия на кнопку, тобишь форма должна быть уже заполнена. А у меня как происходит, я жмакая на линку на страницы (обычной JSP страницей, без формы) с линкой связан ActionClass соотвктствующий(LecturerInfEditAction) и там происходит обработка параметров полученных и линки, плюс подготовка коллекции, и переход на страницу с формой, где нужно заполнить поля в том числе и combobox. Так нельзя делать? Если нелзья то это значит, что надо через ActionForm работать, поясните пожалуйста как именно делать? |
|||
|
||||
BlackD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
Никакой не validate. В Validate вообще кода серьезного не должно быть.
ActionForm используется не только для получения данных от страницы, но и для отправки данных на страницу. В твоем Action обрабатывай получение параметров из реквеста, запихивай их в ActionForm, потом перенаправляешь на страницу, на которой уже находится тег select. И там используешь ActionForm, как бин (в struts-config описываешь). P.S. Если непонятно или не получится, выложу пример(пользователь попадает на страницу(не через действие, напрямую), там ему предлагается выбор языка интерфейса через тег select.) Это сообщение отредактировал(а) BlackD - 21.5.2007, 19:16 |
|||
|
||||
Vassik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Ну приблизительно понятно, но буду признателен, если выложишь пример с комментами, если не сложно
![]() |
|||
|
||||
BlackD |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
Ну что же, в путь. Привожу небольшой кусочек проекта, немного модернизирован под твой случай
![]() Как работает: на странице есть ссылка buydisks, при нажатии на нее выполняется действие disks.do struts-config:
А вот наш ActionForm (DiskForm):
Вот класс, экземпляры которого заносятся в коллекцию:
Теперь обратим внимание на страницу disks.jsp, куда происходит перенаправление после выполнения ShowDisksAction
name="disk" - пишем имя бина ActionForm(маппится в struts-config) property="diskName" - сода запишется выбранное значение (бин ActionForm должен иметь такую переменную и методы доступа к ней) html:optionsCollection name="disk" - имя бина ActionForm, в котором находится коллекция обьектов, подлежащих выводу. property="disks" - собственно, сама коллекция label="diskName" - что писать в комбобоксе (переменная не в ActionForm, а уже DiskDetails) value="diskName" - значение (переменная не в ActionForm, а уже DiskDetails) вроде все рассказал, пробуй ![]() |
||||||||||
|
|||||||||||
Vassik |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Хм... не работает все сделал, так же как у тебя, ActionClass не сробатывает, говрит после нажатия на линку
разумеется, если input поставить то будет произведена попытка перейти на эту страницу. Так что ActionClass не сробатывает(com.myapp.struts.LecturerEditAction). На сколько я помню, во всех примерах, когда action описывается и когда в теги есть ActionForm, т.е. атрибут name, то управление передается ему, а потом уж ActionClassу соответствующему. А логика точно такая же как у тебя
|
||||||||||
|
|||||||||||
BlackD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
А ты описал бин ActionForm? Вечером посмотрю поподробнее, сейчас просто уходить нужно. <html:link action="disks">Buy disks</html:link> линк так выглядит? Это сообщение отредактировал(а) BlackD - 22.5.2007, 11:46 |
|||
|
||||
Vassik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Конечно, ActionForm у меня LecturerEditActionForm и в struts-config.xml тоже описал
|
|||
|
||||
BlackD |
|
||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
все-таки мне кажется, что линк у тебя выглядит не так:
У меня работает ![]() кстати, у меня не так, как у тебя.
в твоей ActionForm нет переменной id |
||||
|
|||||
Vassik |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Линка у меня выглядит вот так вот
В map у меня хранятся параметры, которые включаются в линку, кстати, когда я делаю как у тебя то этот map приходиться в сессию пихать, а вообще map у меня в реквесте до этого был ну да, это мой баг, но фишка в том что ActionClass не срабатывает LecturerEditAction, сначала же он должен отработать, так? а потом ActionForm? Когда такой экшен
Он просит input указать
А если в качестве инпута указать, ту страницу на которой линка, то при нажатии на линку браузер на ней и остается |
||||||||
|
|||||||||
BlackD |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 3.10.2005 Репутация: 1 Всего: 1 |
наоборот. Сначала ActionForm. Затем Action. input attribute нужен для того, чтобы при непрохождении метода Validate(определяется в твоем ActionForm) вернутся на начальную страницу. Ну и для
<html:link page="infedit" name="map"> Почему page? Ты не на страницу же должен переходить, а на действие. И только потом на страницу. То бишь
|
||||||
|
|||||||
Vassik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 31.1.2006 Репутация: нет Всего: нет |
Все сделал, спасибо
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |