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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> при переходе по ссылке между jsp теряются данные и, данные из сервлета не выводятся в jsp 
:(
    Опции темы
4y4z
Дата 22.6.2011, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть две JSP-страницы и сервлет, отвечающий за передачу данных между ними:
Сервлет
Код

public class MessageHandlerServlet extends HttpServlet {
    Comment comm = new Comment();
    List <String> commList = new ArrayList();
   public void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse)
       throws ServletException, IOException {
       aRequest.setCharacterEncoding("utf-8");

       Date dt = new Date();
comm.setAuthor(aRequest.getParameter("author"));
comm.setMessagetext(aRequest.getParameter("message"));
comm.setDate(dt);
commList.add(comm.toString());
aRequest.setAttribute("listofmessages", commList);
 RequestDispatcher dispatcher = aRequest.getRequestDispatcher("messages.jsp");
 dispatcher.forward(aRequest, aResponse);

   
}
 public void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse)throws ServletException, IOException{
     aRequest.setCharacterEncoding("utf-8");
      aRequest.setAttribute("listofmessages", commList);
 RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aRequest.getContextPath());
 dispatcher.forward(aRequest, aResponse);
     

 }  
}


newmessage.jsp :
Код

<%@page contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>New message</title>
    </head>
    <body><h1>Please fill form</h1>
       <a href="<%=request.getContextPath()%>/messages.jsp">View all messages</a><br/>
        <form action="/GuestBook2/messagehandler" method="POST">
            <h2>author name: </h2>
            <p><input type="text" name="author" size="25" value=""/></p>
            <h2>text: </h2>
            <p><textarea name="message" wrap="virtual" cols="40" rows="4"></textarea></p>
            <p><input type="submit" value="post new message"/></p>
            
        </form>
    </body>
</html>


messages.jsp :
Код

<%@page contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="ru.ayaz.guestbook2.Comment"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>View all messages</title>
        
    </head>
    <body>
        <a href="<%=request.getContextPath()%>/newmessage.jsp">add new message</a><br/>
        <h1>List of messages</h1>
        
        <%List <String> commlist = (ArrayList) request.getAttribute("listofmessages");
                 if(commlist != null)
               {
               for(String comm : commlist){%>
<tr><td align="center"><p><%=comm%><p><a href=#>to the top of page</a></p></p></td></tr><%}};%>              
    </body>
</html>


При добавлении нового сообщения на странице newmessage путем заполнения формы и передачи по нажатию кнопки оно появляется в списке на странице messages. Однако если переходить на страницу messages по гиперссылке View all messages то список записей пустой. В чем может быть причина?
PM MAIL   Вверх
Stolzen
Дата 23.6.2011, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В таком случае на вторую страницу нужно явно передавать параметры через post или get. Это вам не php smile
А вообще не очень удачная идея - советую пересмотреть архитектуру. 



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
4y4z
Дата 23.6.2011, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Stolzen @ 23.6.2011,  03:03)
В таком случае на вторую страницу нужно явно передавать параметры через post или get. Это вам не php smile
А вообще не очень удачная идея - советую пересмотреть архитектуру.

А как реализовать эту явную передачу? В методе doPost у меня вроде как передача и идет.
PM MAIL   Вверх
dobrolub
Дата 23.6.2011, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Причина может быть в том, что сёрвлет MessageHandlerServlet создаётся снова для каждого запроса.

Данные лучше хранить в контексте ServletContext. Этот объект создаётся в единственном экземпляре для каждого web-app.


PM   Вверх
4y4z
Дата 10.7.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dobrolub @ 23.6.2011,  05:34)
Причина может быть в том, что сёрвлет MessageHandlerServlet создаётся снова для каждого запроса.

Данные лучше хранить в контексте ServletContext. Этот объект создаётся в единственном экземпляре для каждого web-app.

Прочитал в документации про объект ServletContext. А как с ним работать не понял. Когда нужно добавлять аттрибут в список аттрибутов контекста? как извлекать аттрибут?
при попытке написать примерно такой код в теле сервлета результат нулевой:
Код

public class MessageHandlerServlet extends HttpServlet {
    
    Comment comm = new Comment();
    JDBCHandler handler = new JDBCHandler();
public void init (ServletConfig config) throws ServletException
    {
        this.config = config;
        ServletContext sc = config.getServletContext();
        sc.setAttribute( "posts",handler.getPosts() );
    } 
 
    @Override    
   public void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse)
       throws ServletException, IOException{
       aRequest.setCharacterEncoding("utf-8");
       Calendar dt = GregorianCalendar.getInstance();
      
comm.setAuthor(aRequest.getParameter("author"));
comm.setMessagetext(aRequest.getParameter("message"));
comm.setDate(dt);

handler.makePost(comm);



aRequest.setAttribute("listofmessages",handler.getPosts());
aRequest.setAttribute("messageadd","Message added");
 RequestDispatcher dispatcher = aRequest.getRequestDispatcher("messages.jsp");
 dispatcher.forward(aRequest, aResponse);

   
}
    @Override
    public void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse)throws ServletException, IOException{
     aRequest.setCharacterEncoding("utf-8");
      aRequest.setAttribute("listofmessages",config.getServletContext().getAttribute("posts"));
 RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aRequest.getContextPath());
 dispatcher.forward(aRequest, aResponse);
     

 }  
}

 }  


при переходе по ссылке список сообщений все равно остается пустым. я понимаю, что порядок работы с контекстом неправильный, но как узнать правильный порядок? быть может нужно дополнительно отредактировать web.xml?

PM MAIL   Вверх
Farmazon
Дата 11.7.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


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

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



в запросе нет этой вашей  \request.getAttribute("listofmessages")\


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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