Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема в передачи параметров из jsp, Struts 
V
    Опции темы
Vassik
Дата 7.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Привет всем.
Сначала расскажу, что я делаю. Значит у меня есть бин, который содержит коллекцию данных, которую я выбрал из БД(фамилия, имя, отчество). Эту коллекцию, я добавляю в реквесть в LoginAction классе, следующим образом
Код

        LecturerHt lecturercollection=new LecturerHt();
        lecturercollection.setLecturers(mDb.getLecturers());
        req.setAttribute("lecturerCollection",lecturercollection);

 и перехожу на jsp, которая отображает эту коллекцию
Код

return mapping.findForward("success");

Вся моя информация успешно отображается, дальше моя задача:
 вывожу ФИО людей, причем в виде ссылок, т.е. я хочу чтобы при нажатии на ФИО у меня это ФИО передовалось в соответствующий ActionClass для дальнешей работы. Вот код JSP страницы
Код

<logic:iterate id="lect" name="lecturerCollection" property="lecturers">
            <tr>
                <td><html:link action="getlecturerinfo" paramId="urlParamBean" paramName="lect"><bean:write name="lect" property="name"/></html:link></td>
                <td><bean:write name="lect" property="degree"/></td>
            </tr>
</logic:iterate> 

Поясню, что я пытаюсь делать, значит я хочу передать бин, который содержит конкретную информацию о человеке, в качестве значения параметра urlParamBean в тег <html:link>. Все вроде передается, но после нажатие на какую нить линку(ФИО) в соответсвуюшем ActionClass этот парметр не извлекается.Вот код
Код

LecturerEnumBean buf=new LecturerEnumBean();
buf=(LecturerEnumBean) req.getAttribute("urlParamBean");

Посмотрел код html страницы и там видно, что бин добавился в качестве параметра, вот пример
<a href="/WebApplication2/getlecturerinfo.do?urlParamBean=com.myapp.struts.LecturerEnumBean%401369763">Иванов Сергей Сергеевич</a>

Не пойму почему при попытки забрать этот бин возвращается null, может кто подскажет?

Вот полный код класс LoginAction, где я добавляю в реквест свою коллекцию и перехожу на jsp страницу
Код

public class LoginAction extends Action{
    public ActionForward execute(ActionMapping mapping, 
                     ActionForm form,
                     HttpServletRequest req,
                     HttpServletResponse res)
    throws IOException, ServletException{
    String name = ((LoginForm)form).getName();
        String password  = ((LoginForm)form).getPassword();
        User user=new User(name,password);
        HttpSession session=req.getSession();
        session.setAttribute("user",user);
        Db mDb;
         try{ 
              mDb=new Db(name,password);
              mDb.closeConn();
           }catch(SQLException ex){
               return mapping.findForward("failed");
                  };
        LecturerHt lecturercollection=new LecturerHt();
        lecturercollection.setLecturers(mDb.getLecturers());
        req.setAttribute("lecturerCollection",lecturercollection);
    return mapping.findForward("success");
    }
}


А вот код класса, там где я пытаюсь извлечь мой бин, но возвращается null в переменную buf

Код

public class GetInfLecturerAction extends Action {
    public ActionForward execute(ActionMapping mapping, 
                     ActionForm form,
                     HttpServletRequest req,
                     HttpServletResponse res)
    throws IOException, ServletException, SQLException{
    LecturerEnumBean buf=new LecturerEnumBean();
        buf=(LecturerEnumBean) req.getAttribute("urlParamBean");
        HttpSession session=req.getSession();
        User user=new User();
        user=(User) session.getAttribute("user");
    }
}

PM MAIL   Вверх
ekr
Дата 7.5.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Привет.
Смотри: у тебя при переходе по ссылке формируется get-запрос с параметрами.
В твоем случае это /WebApplication2/getlecturerinfo.do?urlParamBean=com.myapp.struts.LecturerEnumBean%401369763. Так вот получить этот параметр из запроса ты можешь методом request.getParameter("urlParamBean").

А ты пытаешься получить атрибут в коде, а это возможно только если ты forward-ишь или includ-ишь на этот код.

Мораль: для запроса атрибут и параметр - разные вещи ))
Ко всему этому у тебя как параметр запроса передается значение объектной ссылки (это там где имя класса, собачка и число).

Тебе надо в параметре запроса передавать идентификатор (id, первичный ключ, etc.) нужного объекта, а затем в action-е вынимать по полученному ключу объект.
Тогда URL будет вида /WebApplication2/getlecturerinfo.do?LectureID=ID. 

Это сообщение отредактировал(а) ekr - 7.5.2007, 22:16


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Vassik
Дата 7.5.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Цитата(ekr @  7.5.2007,  22:15 Найти цитируемый пост)
Мораль: для запроса атрибут и параметр - разные вещи ))
Ко всему этому у тебя как параметр запроса передается значение объектной ссылки (это там где имя класса, собачка и число).


А есть какой нибудь способ все таки получить этот объект?

 
Цитата(ekr @  7.5.2007,  22:15 Найти цитируемый пост)
Тебе надо в параметре запроса передавать идентификатор (id, первичный ключ, etc.) нужного объекта, а затем в action-е вынимать по полученному ключу объект.
Тогда URL будет вида /WebApplication2/getlecturerinfo.do?LectureID=ID. 


Понял, но допустим как мне это ключ засунуть в запрос (допустим Ф.И.О)? Просто непонятно как это имя включит в парамтр struts тега 
Код
<html:link>

PM MAIL   Вверх
ekr
Дата 8.5.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Класс препода должен содержать поле id. Что-то в таком стиле:
Код

public class Lecturer {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    
}



Затем тебе будет необходимо в страничке со списком преподов вывести ссылки так, чтобы id препода присутствовал в них как параметр. Это для того, чтобы в action-обработчике этой ссылки ты смог понять, инфу о каком преподе запросил юзер, считав значение параметра.

Для этого следует формировать эти ссылки примерно так:
Код

<html:link action="getlecturerinfo" paramId="urlParamBean" paramName="lect" paramProperty="id"><bean:write name="lect" property="name"/></html:link>


Это даст на выходе примерно такой html-код:
Код

<a href="http://localhost:8084/WebApplication5/getlecturerinfo.do?urlParamBean=1">Pervy Na</a>



--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Vassik
Дата 8.5.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Спасибо большое) Оказалось все простоsmile Затра попробую smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.