Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблема передачи параметра из input поля


Автор: Жоржик 11.6.2011, 18:17
Здравствуйте. Я новичек в 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() добавить строку, то все работает.

Автор: 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:04
Цитата(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,  дабы видеть что передаётся.

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

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

Автор: llalive 11.6.2011, 19:42
Ну допустим можно ссылаться на тот же сервлет (если прописать путь 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).
 
Вообщем, ###код в действии)).

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)