0

Javaサーブレットからjspページに情報を送信することが私の割り当ての要件です。

私の質問は、関数の呼び出しに関するものです。複数の結果を見つけるSQLクエリが含まれています。私が抱えている問題は、結果セットの最後の最後だけをjspページに返し、すべての結果を返すことではないということです。

サーブレットは次のとおりです。

private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);

    //Set data you want to send back to the request (will be forwarded to the page)
//Can set string, int, list, array etc.
String sql = "SELECT id, user_id" +
          " FROM lab" +
        " WHERE user_id=" + (Integer)session.getAttribute("id");

  try{
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
    System.out.println("got boobs");
    System.out.println(session.getAttribute("id"));

  Statement stmt = con.createStatement();
  ResultSet res = stmt.executeQuery(sql);
  ArrayList<String> list1 = new ArrayList<String>();
  if (res.next()){
      do{
           list1.add(res.getString(1));
           list1.add(res.getString(2));
      }while(res.next());

      request.setAttribute("res", res);
      }
      for(int i=0;i<list1.size();i++){
          System.out.println(list1.get(i));
      }
  }catch (SQLException e) {
    } 
    catch (Exception e) {
    } 


    //Decides what page to send the request data to
    RequestDispatcher view = request.getRequestDispatcher("Student_manage.jsp");
    //Forward to the page and pass the request and response information
    view.forward(request, response); 
}

これがjspです

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Mars University Lab System</title>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen">
</head>

<body>
<jsp:include page="headerStudent.jsp"/>


<tr>
<td>
</td>
</tr>

<tr>
<td>
<div id = "centrecontent">
<br>
<h3>Manage Timetable</h3>

  TESTING THE NO FORM REDIRECTION HERE:<br>

<% String data1 = String.valueOf(request.getAttribute("data1")); %>
 <% String data2 = String.valueOf(request.getAttribute("data2")); %>
<%=data1 %>
<%=data2 %>


</div>

<jsp:include page="footer.jsp"/>


</body>

</html>

各結果をステップスルーするには、jspページに何らかのdoステートメントが必要だと思います。

4

1 に答える 1

2

あなたの論理は間違っている

の行を反復し、それをリクエスト属性およびrsに格納します。次に、次の行を取得し、同じ属性を何度も上書きします。data1data2

したがって、の最後の値が残りますrs

Collection結果を に保存Collectionしてから、requestオブジェクトに保存する方が良いと思います

更新1

このサンプルコードを検討してください

public class MyObject{
  private String data1;
  private String data2;
    public void setData1(String data1) {
        this.data1 = data1;
    }

    public String getData1() {
        return data1;
    }

    public void setData2(String data2) {
        this.data2 = data2;
    }

    public String getData2() {
        return data2;
    }
}

これがあなたのオブジェクトです。

次に、上記のコードを次のように変更します。

List <MyObject> list = new List<MyObject>();
if (res.next()){
    MyObject obj = new MyObject();
    do{
          obj.setData1(res.getString(1));
          obj.setData2(res.getString(2));
          list.add(obj);
    }while(res.next());

request.setAttribute("results", list);
}

Listこれにより、という名前のリクエスト属性にが追加されますresults

次に、次を使用してリストを取得できます

List <MyObject> results = (List<MyObject>) request.getAttribute("results");

更新2

PS:do/whileエラーが発生しやすいため、ループを削除して、whileこのようなものに置き換えることをお勧めします。

    while(res.next()){
          obj.setData1("data1", res.getString(1));
          obj.setData2("data2", res.getString(2));
          list.add(obj);
    }

更新3

このようにjspに出力します

<%@page import="java.util.*"%>
<%
  List <MyObject> results = (List<MyObject>) request.getAttribute("results");
  for(MyObject obj : results){
    out.write(obj.getData1() + " "+ obj.getData2() + "<br/>";
  }
%>
于 2012-10-04T07:51:23.930 に答える