2012-06-08 5 views
-1

У меня есть страница index.jsp с кнопками с именем «обновить», «переслать» и «отредактировать». Если я нажму кнопку обновления, он вызовет сервлет, и значения будут отображаться на странице index.jsp.JSP не отображает данные с запроса POST на сервлет

Когда я нажимаю кнопку «вперед», он вызывает другой сервлет и переходит на другую страницу forward_call_log.jsp. На этой странице, когда я нажимаю кнопку «вперед», она вызывает другой сервлет, и этот сервлет отображает страницу index.jsp. Отображается страница index.jsp, но значения из базы данных недоступны.

Как я могу исправить эту проблему?

index.jsp

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Pager Example - www.javaworkspace.com</title> 
</head> 
<body> 
<form method="post" action="./Problem_retrive" > 
<input type="submit" value="Refresh"> 
</form> 
<form action="./edit_call_log" method="post"> 
<% 
ResultSet rs=null; 
try 
{ 
    rs=(ResultSet)request.getAttribute("rs"); 
    //request.setAttribute("rs",rs); 
    if(rs.next()) 
    { 
    %> 
    <table border=1 cellspacing=1 cellpadding=1> 
     <tr> 
      <th>check box</th> 
      <th>Problem ID</th> 
      <th>user ID</th> 
     </tr> 
     <% 
      do 
      { 
     %> 
       <tr> 
        <td><input type="checkbox" name="checkbox" value="<%=rs.getString(1) %>"></td> 
        <td><%=rs.getString(1) %></td> 
        <td><%=rs.getString(2) %></td> 
       </tr> 
     <% 
      } 
      while(rs.next()); 
     %> 
    </table> 
<% 
    } 
    else 
    { 
     out.println("hiiiiiiii"); 
    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
%> 

<input type="submit" name="act" value="EditCall"/> 
<input type="submit" name="act" value="Forward"/> 
</form> 
</body> 
</html> 

После нажатия на Refresh кнопку вызова Edit_call_servlet.java

import database.problemdesc.Problem_retrive_class; 
import database.user_master.User_master; 
import java.sql.*; 
public class Edit_call extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setContentType("text/html"); 
    HttpSession session = request.getSession(true); 
    ResultSet rs=null; 
    Problem_retrive_class prc=new Problem_retrive_class(); 
    int checkbox=Integer.parseInt(request.getParameter("checkbox")); 
    session.setAttribute("problem_id", checkbox); 
    String act=request.getParameter("act"); 
    if(act.equals("EditCall")) 
    { 

     try 
     { 


      rs=prc.select_table(checkbox); 
      RequestDispatcher rd = request.getRequestDispatcher("edit_call_log.jsp"); 
      request.setAttribute("rs", rs); 
      rd.forward(request, response); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    else if(act.equals("Forward")) 
    { 
     System.out.println("Forward page"); 
     try 
     { 
      ResultSet rs1=null; 
      User_master um=new User_master(); 
      rs=prc.select_table(checkbox); 
      if(rs.next()) 
      { 
       System.out.println("Value retrieve from PRC select_table"); 
       rs1=um.select_table(rs.getString(7)); 
       System.out.println("Value retrieve from PRC select_table"+rs.getString(7)); 
       RequestDispatcher rd = request.getRequestDispatcher("forward_call_log.jsp"); 
       request.setAttribute("rs1", rs1); 
       request.setAttribute("user_type", rs.getString(7)); 
       rd.forward(request, response); 
      } 
      else 
      { 
       RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 

       rd.forward(request, response); 
      } 

     } 
     catch(Exception e) 
     { 

     } 
    } 

} 

} 

После нажатия на вперед кнопку вызова на Problem_retrive_servlet.java

import database.problemdesc.Problem_retrive_class; 


public class Problem_retrive extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out=response.getWriter(); 
    Connection con=null; 
    ResultSet rs=null; 
     try 
     { 
      Problem_retrive_class prc=new Problem_retrive_class(); 
      DBBean db=new DBBean(); 
      con=db.getDBConnection(); 
      rs=prc.select_table(); 

      RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 

      rd.forward(request, response); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

} 

} 
+0

Проблема, которую вы описываете, связана с кнопкой с именем _Forward_ на 'forward_call_log.jsp', однако вы не включили этот код. Укажите, какой класс и метод запускаются при нажатии этой кнопки? – Brad

ответ

0

Похоже, что вы не прикрепляете какие-либо данные к объекту запроса, поэтому index.jsp не имеет ничего общего. Я предполагаю, что это код, который выполняется при возникновении проблемы.

public class Edit_call extends HttpServlet { 

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

    else if(act.equals("Forward")) 
    { 
     try 
     { 
      ... 
      { 
       ... 
      } 
      else 
      { 
       RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 

       /*** YOUR PROBLEM IS HERE ***/ 

       rd.forward(request, response); 
      } 

[EDIT]

Из вашего вопроса я предполагаю, что кнопка «обновить» на JSP работает, как ожидалось (т.е. данные из базы данных отображается как и ожидалось). С помощью следующего кода JSP ...

<form method="post" action="./Problem_retrive" > 
    <input type="submit" value="Refresh"> 
</form> 

метода выполняются на сервере Problem_retrive.doPost()

Исходя из этого, мы тогда должны понять, какой именно код exectued, когда кнопка «вперед» в настоящее время щелкнуло на forward_call_log.jsp. Вы описали, что эта кнопка «вперед» отображает index.jsp, но не включает данные из базы данных. Предположим, что его вызов Edit_call.doPost() *.

Я предлагаю вам установить точки останова отладчика во всех ваших методах doPost() для подтверждения этого предположения или просто обратиться к операторам System.out.println(), если вы не можете отлаживать.

Поэтому вам нужно сравнить то, что происходит в Problem_retrive.doPost(), с тем, что не происходит в Edit_call.doPost(), когда данные не отображаются. Я подозреваю, что вы не вызывая request.setAttribute()

rs=prc.select_table(); 
RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 
request.setAttribute("rs", rs); 
rd.forward(request, response); 

примечание стороны о хорошем дизайне

Вы можете прочитать о MVC Design Pattern для лучшего способа разработки кода.

+0

@Prasanta. В качестве побочной заметки считается, что лучше не передавать объекты JDBC, связанные с вашим JSP (то есть 'ResultSet'). Ваш класс контроллера должен извлечь нужные ему значения из набора результатов и создать некоторую коллекцию (например, 'ArrayList'). – Brad

+0

Можете ли вы, пожалуйста, объяснить мне пример ..... Поскольку я новичок в jsp-servlet ... Это будет очень полезно для меня ......... – Prasanta

Смежные вопросы