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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема передачи параметра из input поля, Проблема передачи параметра из input пол 
:(
    Опции темы
Жоржик
Дата 11.6.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Я новичек в J2EE, так что пока использую только сервлеты без JSP. Так вот, в сервлете метод GET:

Код

                protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("<form action=\"LoginForm\" method=\"POST\">");
        out.print("<input type=\"text\" name=\"newName\"/>");
        out.print("<input type=\"submit\" value=\"Add\" />");
        out.print("</form>");


А метод POST:
Код

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("LoginExample");
        EntityManager manager = factory.createEntityManager(); 
        Users users = new Users();
        users.setName(request.getParameter("newName"));
        manager.getTransaction().begin();
        manager.persist(users);
        manager.getTransaction().commit();
        manager.close();
        factory.close();
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("OK");


request.getParameter("newName") постоянно возвращает null. Что я делаю не правильно? 

Если users.setName() добавить строку, то все работает.
PM MAIL   Вверх
llalive
  Дата 11.6.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Куда отправляет данные Ваша форма?

Код

out.print("<form action=\"LoginForm\" method=\"POST\">");
out.print("<input type=\"text\" name=\"newName\"/>");
out.print("<input type=\"submit\" value=\"Add\" />");


Функция doPost выполняется при отправке данных - т.е. при нажатии на кнопку submit. Далее данные отправляются по пути LoginForm, указанному в параметре action формы. 

Проблема в том, что request.getParameter("newName") возвращает null? Собственно, на момент вызова массив с параметрами действительно пуст. 
Допустим если бы у Вас был другой сервлет, и на него ссылалась данная форма - то он бы принял Вашу переменную. 

Также бывает полезно использовать method=GET,  дабы видеть что передаётся.

Всё вышеизложенное ИМХО - могу ошибаться..
PM MAIL   Вверх
Жоржик
Дата 11.6.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(llalive @ 11.6.2011,  18:36)
Куда отправляет данные Ваша форма?

Код

out.print("<form action=\"LoginForm\" method=\"POST\">");
out.print("<input type=\"text\" name=\"newName\"/>");
out.print("<input type=\"submit\" value=\"Add\" />");


Функция doPost выполняется при отправке данных - т.е. при нажатии на кнопку submit. Далее данные отправляются по пути LoginForm, указанному в параметре action формы. 

Проблема в том, что request.getParameter("newName") возвращает null? Собственно, на момент вызова массив с параметрами действительно пуст. 
Допустим если бы у Вас был другой сервлет, и на него ссылалась данная форма - то он бы принял Вашу переменную. 

Также бывает полезно использовать method=GET,  дабы видеть что передаётся.

Всё вышеизложенное ИМХО - могу ошибаться..

А без передачи в другой сервлет никак не получится?

Это сообщение отредактировал(а) Жоржик - 11.6.2011, 19:28
PM MAIL   Вверх
llalive
  Дата 11.6.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну допустим можно ссылаться на тот же сервлет (если прописать путь LoginForm для него). 

Из разряда "на костылях" smile

Используйте функцию proceessRequest. Думаю нечто подобное должно работать. Т.е. сервлет будет выводить форму, затем редиректить сам на себя и, если параметр dataSend будет равен true - будет обрабатывать переправленную переменную newName (далее я так понял Вы её в базу сохраняете?). 

Код

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        if (request.getParameter("dataSend").equals("true")){
            PrintWriter out = response.getWriter();
            out.print("<form action=\"LoginForm\" method=\"POST\">");
            out.print("<input type=\"text\" name=\"newName\"/>");
            out.print("<input type=\"submit\" value=\"Add\" />");
            out.print("</form>");
        else {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("LoginExample");
            EntityManager manager = factory.createEntityManager(); 
            Users users = new Users();
            users.setName(request.getParameter("newName"));
            manager.getTransaction().begin();
            manager.persist(users);
            manager.getTransaction().commit();
            manager.close();
            factory.close();
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.print("OK");
        }
    }


Не проверял, ибо вырвано из контекста и не до конца ясна задача Вашей программы. Может выдавать NullException при проверке (request.getParameter("dataSend").equals("true")). Тогда ещё и на null придется проверять - (!request.getParameter("dataSend")==null).
 
Вообщем, ###код в действии)).
PM MAIL   Вверх
Жоржик
Дата 11.6.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Проблему решил: прописал в form полный путь к сервлету out.print("<form action=\"../Example/LoginForm\" method=\"POST\">").

Это сообщение отредактировал(а) Жоржик - 11.6.2011, 19:53
PM MAIL   Вверх
Stolzen
Дата 12.6.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Цитата(Жоржик @  11.6.2011,  19:17 Найти цитируемый пост)
"<form action=\"LoginForm\" method=\"POST\">"

Замените на <form action=\"\" method=\"POST\"> и все должно работать.


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

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

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


 




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


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

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