Html C: каждый пытается создать таблицу с количеством возрастов

#java #html #spring #jsp

#java #HTML #весна #jsp

Вопрос:

Я пытаюсь создать таблицу возрастов пользователей, если у них положительный результат теста. В настоящее время у меня это работает, но для каждого цикла создается еще одна строка с включенным результатом. Я пытаюсь получить 1 строку с суммированными числами. Я не совсем уверен, как это сделать. Ниже приведена картинка таблицы.

введите описание изображения здесь

Ниже приведен код, который я создал, чтобы получить возраст и убедиться, что он находится между возрастными скобками.

 <!-- Infection rate per Age Group -->
 <c:set var="count2" value="0"/>
<table>
<tr>
<th>Under 20</th>
<th>20-29</th>
<th>30-39</th>
<th>40-49</th>
<th>50-59</th>
<th>60-69</th>
<th>Over 70</th>
</tr>
 <c:forEach items="${results}" var="result">
<c:set var="neg" value="Positive"/>
<!-- Set age bounds -->
<c:set var="u20" value="0"/>
<c:set var="b2029" value="0"/>
<c:set var="b3039" value="0"/>
<c:set var="b4049" value="0"/>
<c:set var="b5059" value="0"/>
<c:set var="b6069" value="0"/>
<c:set var="o70" value="0"/>
<c:set var="age" value="${result.age}"/>
<c:set var="pos" value="${result.testResult}"/>

 <c:if test="${neg eq pos}">
<!-- Check if age group is in boundaires -->
<c:if test="${age<20}">
<c:set var="u20" value="${u20   1 }"/>
</c:if>

<c:if test="${age >=20}">
    <c:if test="${age <=29 }">
<c:set var="b2029" value="${b2029   1 }"/>
</c:if>
 </c:if>
 <c:if test="${age >=30}">
    <c:if test="${age <=39 }">
 <c:set var="b3039" value="${b3039   1 }"/>
 </c:if>
</c:if>

<c:if test="${age >=40}">
    <c:if test="${age <49}">
<c:set var="b4049" value="${b4049   1 }"/>
</c:if>
</c:if>

 <c:if test="${age >=50}">
    <c:if test="${age <=59 }">
    <c:set var="b5059" value="${b5059   1 }"/>
  </c:if>
</c:if>

  <c:if test="${age >=60}">
    <c:if test="${age <69 }">
<c:set var="b6069" value="${b6069   1 }"/>
</c:if>
</c:if>
<c:if test="${age >70}">
<c:set var="o70" value="${o70   1 }"/>
</c:if>

</c:if>
<tr>
<td>${u20}</td>
<td>${b2029}</td>
<td>${b3039}</td>
<td>${b4049}</td>
<td>${b5059}</td>
<td>${b6069}</td>
<td>${o70}</td>
</tr>

</c:forEach>

</table>
 

Таким образом, вместо того, чтобы иметь строку для каждого пользователя (как сейчас) Я бы просто хотел, чтобы была 1 отдельная строка со всеми возрастами — например, в категории 30-39 есть 2 положительных результата, так что это должно быть 2, а не 1 и 1. Спасибо за вашу помощь

Ответ №1:

В вашем текущем коде вы устанавливаете значение <c:set.. переменной на каждой итерации, то есть: 0 так что она всегда будет иметь значение 0 , а также ваш <tr> тег находится под c:forEach , поэтому на каждой итерации создается новая строка (tr).Вместо этого вы можете изменить свой код, как показано ниже :

 <table>
<tr>
<th>Under 20</th>
<!--other th-->
</tr>
<!-- put thse varaible outside-->
<c:set var="neg" value="Positive"/>
<c:set var="u20" value="0"/>
<c:set var="b2029" value="0"/>
<c:set var="b3039" value="0"/>
<c:set var="b4049" value="0"/>
<c:set var="b5059" value="0"/>
<c:set var="b6069" value="0"/>
<c:set var="o70" value="0"/>
 <c:forEach items="${results}" var="result">
<c:set var="age" value="${result.age}"/>
<c:set var="pos" value="${result.testResult}"/>

 <c:if test="${neg eq pos}">
<!-- Check if age group is in boundaires -->
<c:if test="${age<20}">
<c:set var="u20" value="${u20   1 }"/>
</c:if>

<c:if test="${age >=20}">
    <c:if test="${age <=29 }">
<c:set var="b2029" value="${b2029   1 }"/>
</c:if>
 </c:if>
<!--same if statemnts here-->

</c:forEach>
<tr>
<td>${u20}</td>
<td>${b2029}</td>
<td>${b3039}</td>
<td>${b4049}</td>
<td>${b5059}</td>
<td>${b6069}</td>
<td>${o70}</td>
</tr>

</table>