#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>