You seem to be mixing up iterating in JavaScript and iterating in your template engine. From ${Dates[i]} it looks like you want i to be a variable in your template, but you've declared it as a variable in your generated JavaScript.
Something like (untested)
var tax_data = new Array();
<c:forEach begin="1" end="Dates.size()" var="i">
tax_data.push({"period": "${Dates[i]}", "Poids": ${WeightMesures[Dates[i]]}, "Nombre de pas": ${WalkingMesures[Dates[i]]}, "Pulsation": ${BpMesures[Dates[i]]} }) ;
</c:forEach>
should result in a row for each date in the JavaScript
var tax_data = new Array();
tax_data.push({"period": "2014-01-01", "Poids": 32, ... }) ;
tax_data.push({"period": "2014-02-01", "Poids": 32, ... }) ;
tax_data.push({"period": "2014-02-01", "Poids": 32, ... }) ;
There isn't a simple way of having the generated JavaScript reference then Dates table without writing out each row of it, either directly or in response to a separate ajax request.
${}in your object?iinstead ofnumberinforstatement and removei++from end of it.