Question

I want to show the list of dates between two choosen dates (the user choose dateA and dateB and when he clicks on SUBMIT another jsp is open to show the dates in a table with another informations) The first ROW is for labels: dates,driver,car,gas station The second row is for informations; so far i've done this :

index.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="java.util.GregorianCalendar"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>

<form name="datepickeer" action="showdates.jsp" method="POST">
<table>
<tr><td>Date début :</td> <td><input type = "date" name = "dateA"></td><tr>
<tr><td>Date Fin :</td> <td><input type = "date" name = "dateB"></td><tr>

<tr><td><input type = "submit" name = "submit" value = "submit"></td></tr>
</table>
</form>
</body>
</html>

showdates.jsp:

<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.GregorianCalendar"%>
<%@page import="java.util.Calendar"%>
<%@ page import = "java.util.Date,java.text.SimpleDateFormat,java.text.ParseException"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<table>

<tr> 
<td> Dates </td>
<td> Driver</td>
<td> Car </td>
<td> Gas station </td>
</tr>

<tr>
<td>        
<% 
String dateA =request.getParameter("dateA");
String dateB =request.getParameter("dateB");

SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
Date dateStart = null;
Date dateEnd = null;

dateStart = formater.parse(dateA);
dateEnd = formater.parse(dateB);

Calendar c = GregorianCalendar.getInstance();

c.setTime(dateStart);

List<Date> dates = new ArrayList<Date>();

while (!c.getTime().after(dateEnd)) {
    dates.add(c.getTime());
    c.add(Calendar.DAY_OF_YEAR, 1);
}

for (Date element: dates)
{
SimpleDateFormat newFormater = new SimpleDateFormat("dd-MM-yyyy");
out.println(newFormater.format( element));  
  } %> </td>
<td> Mr alaoui </td>
<td> 235647-A-23 </td>
<td> Marrakech,MOROCCO </td>
 </tr>
</table>
</html>

Help me please

Was it helpful?

Solution

I want to have one date in cell, it means one date in each row

your code will write all dates in single <td> because your for loop is inside <td>, to get output as you stated in comment do like:

<table>
<tr> 
    <th> Dates </th>
    <th> Driver</th>
    <th> Car </th>
    <th> Gas station </th>
</tr>
start loop through your dates
   <tr>
     <td>print date</td>
     <td>print Driver</td>
     <td>print Car</td>
     <td>print Gas station</td>
   </tr>
end loop
</table>


But, better create a custom jsp tag function to do it easily and to keep all java codes inside it instead of jsp like:

create dateDiff.tld inside ${project_root}/(WebContent OR webapp)/WEB-INF/ like:

<?xml version="1.0" encoding="UTF-8"?>
<taglib>
 <tlib-version>1.0</tlib-version>
 <short-name>DateDifference TLD</short-name>
 <jsp-version>2.1</jsp-version>
 <tag>
    <name>GetDatesStartEnd</name>
    <tag-class>com.jsp.tag.dateArrayListTagHandler.DateArrayListTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
       <name>start</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
      <type>java.util.Date</type>      
    </attribute>
    <attribute>
       <name>end</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
      <type>java.util.Date</type>      
    </attribute>    
    <attribute>
       <name>var</name>
       <required>true</required>       
      <type>java.lang.String</type>      
    </attribute>    
  </tag> 
</taglib>

and DateArrayListTag class like:

package com.jsp.tag.dateArrayListTagHandler;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class DateArrayListTag extends SimpleTagSupport {

    private Date start;
    private Date end;
    private String var;

    public void setVar(String var) {
        this.var = var;
    }

    private List<Date> listDates;   

    public Date getStart() {
        return start;
    }
    public void setStart(Date start) {
        this.start = start;
    }
    public Date getEnd() {
        return end;
    }
    public void setEnd(Date end) {
        this.end = end;
    }
    public List<Date> getListDates() {
        return listDates;
    }
    public void setListDates(List<Date> listDates) {
        this.listDates = listDates;
    }

    @Override
    public void doTag() throws JspException, IOException {  
        System.out.println("startDate: "+start);
        System.out.println("endDate: "+end);

        Calendar c = GregorianCalendar.getInstance();
        listDates = new ArrayList<Date>();

        c.setTime(start);

        while (!c.getTime().after(end)) {
            listDates.add(c.getTime());
            c.add(Calendar.DAY_OF_YEAR, 1);
        }

        getJspContext().setAttribute(var, listDates);
    }

}

then, your showdates.jsp will be like:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/dateDiff.tld" prefix="dateDiff" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style type="text/css">
th,td
{
padding:15px;
}
</style>
</head>
<body>
    <fmt:parseDate value="${param.dateA}" var="parsedDateA" pattern="yyyy-MM-dd" />
    Date A:<fmt:formatDate pattern="yyyy-MM-dd" type="DATE" value="${parsedDateA}" var="dateA" />${dateA}
    <fmt:parseDate value="${param.dateB}" var="parsedDateB" pattern="yyyy-MM-dd" />
    Date B:<fmt:formatDate pattern="yyyy-MM-dd" type="DATE" value="${parsedDateB}" var="dateB" />${dateB}

    <dateDiff:GetDatesStartEnd end="${parsedDateB}" start="${parsedDateA}" var="resultDates"/>

<table>
<tr> 
    <th> Dates </th>
    <th> Driver</th>
    <th> Car </th>
    <th> Gas station </th>
</tr>
<c:forEach items="${resultDates}" var="curDt">    
<tr>
    <td>
        <fmt:formatDate pattern="yyyy-MM-dd" type="DATE" value="${curDt}" />
    </td>
    <td>
        Mr alaoui
    </td>
    <td>
        235647-A-23
    </td>
    <td>
        Marrakech,MOROCCO
    </td>
</tr>
</c:forEach>
</table>

</body>
</html>

jstl.x.x.jar and jsp-api.jar file should be available in your project build-path.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top