Reputation: 839
Following is the code of servlet and jsp file
Connect.java
@WebServlet("/calendar")
public class Connect extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fromDate = request.getParameter("fromDate");
String toDate = request.getParameter("toDate");
String query = "SELECT action_time,user_action,user_ip,user_id FROM di.login_detail where (action_time, action_time) OVERLAPS (DATE '"
+ fromDate+ "',DATE '"+ toDate+ "'+ integer '1')" +
" order by action_time desc";
Connection conn = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
System.out.println("done4");
try {
conn = ConnectionUtil.getConnection();
statement = conn.prepareStatement(query);
resultSet = statement.executeQuery();
if (resultSet.next()) {
while(resultSet.next()){
String action_time=resultSet.getString("action_time");
String user_action=resultSet.getString("user_action");
String user_ip=resultSet.getString("user_ip");
String user_id=resultSet.getString("user_id");
request.setAttribute("action_time",action_time);
request.setAttribute("user_action",user_action);
request.setAttribute("user_ip",user_ip);
request.setAttribute("user_id",user_id);
RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");
view.forward(request,response);
}
} else {
System.out.println("not found");
}
} catch (SQLException e) {
throw new ServletException("DB interaction failed", e);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
}
}
}
Calendar.jsp
<%@ page import="java.sql.*" %>
<%
String path = request.getContextPath();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="<%=path%>/js/calendar.js"></script>
<link href="<%=path %>/css/calendar.css" rel="stylesheet">
</head>
<body>
<form action="calendar">
<div class="container">
From:<input name="fromDate" type="text" class="calendarSelectDate" />
To: <input name="toDate" type="text" class="calendarSelectDate" />
<input type="submit" name="b1" value="Go">
</div>
<div id="calendarDiv"></div>
<%= request.getAttribute("action_time")%>
<%= request.getAttribute("user_action")%>
<%= request.getAttribute("user_ip")%>
<%= request.getAttribute("user_id")%>
</form>
</body>
</html>
I am trying to display result to calender.jsp from my servlet , query passed in above produce multiple rows as result but in jsp page it only generates first row output and stop executing. What else could be done here to fetch full result on jsp. Thank you////
Upvotes: 3
Views: 5440
Reputation: 23415
Create a class for e.g.:
public class User {
private String actionTime;
private String userAction;
private String userIp;
private String userId;
//Getters and setters
}
Then you should change your code like this:
ArrayList<User> users = new ArrayList<User>();
while (resultSet.next()) {
User user = new User();
user.setActionTime(resultSet.getString("action_time"));
user.setUserAction(resultSet.getString("user_action"));
user.setUserId(resultSet.getString("user_ip"));
user.setUserIp(resultSet.getString("user_id"));
users.add(user);
}
request.setAttribute("users", users);
RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");
view.forward(request, response);
In the loop always create new user, add it into the users list and when the loop is finished set the whole list as the request attribute.
Then in your JSP use JSTL to process the list:
<c:forEach var="user" items="${users}">
<c:out value="${user.actionTime}"/>
<c:out value="${user.userAction}"/>
<c:out value="${user.userIp}"/>
<c:out value="${user.userId}"/>
</c:forEach>
See also:
Upvotes: 3
Reputation: 2688
As mentioned, with each iteration you are overwriting the request attribute. You are also calling
RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");
view.forward(request,response);
which forwards the response in the first iteration. Create a list or hash and set that attribute, then access it from you JSP
Upvotes: 0