2025-11-12 12:07 만족도 평가 주관식 추가

This commit is contained in:
myname 2025-11-12 12:08:05 +09:00
parent b3a3337147
commit 1e36a5619f
10 changed files with 397 additions and 128 deletions

View File

@ -111,6 +111,8 @@ public class QustnrCommonUtil {
, String p_eduChasiOrd
, VEALettnQestnrMIXService p_vEALettnQestnrMIXService
)throws Exception{
//답변결과 정보
System.out.println("===========!답변결과정보!===========");
VEAQestnrVO vEAQestnrVO = new VEAQestnrVO();
vEAQestnrVO.setSiteId(p_siteId); //청소년
vEAQestnrVO.setSiteIdCd(p_siteIdCd); //10-기본설문, 20-신청자설문, 30-강사설문
@ -125,6 +127,12 @@ public class QustnrCommonUtil {
p_model.addAttribute("chasiSrvyList",chasiSrvyList);
}
List<VEAQestnrVO> chasiSrvyAllList = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_03_ALL(vEAQestnrVO);
if(chasiSrvyAllList.size() > 0) {
p_model.addAttribute("chasiSrvyAllList",chasiSrvyAllList);
}
return p_model;
}
@ -136,6 +144,7 @@ public class QustnrCommonUtil {
, String p_eduChasiOrd
, VEALettnQestnrMIXService p_vEALettnQestnrMIXService
)throws Exception{
//항목 정보
VEAQestnrVO vEAQestnrVO = new VEAQestnrVO();
vEAQestnrVO.setSiteId(p_siteId); //청소년
vEAQestnrVO.setSiteIdCd(p_siteIdCd); //10-기본설문, 20-신청자설문, 30-강사설문
@ -143,6 +152,7 @@ public class QustnrCommonUtil {
vEAQestnrVO.setEduChasiOrd(p_eduChasiOrd);
vEAQestnrVO = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_02(vEAQestnrVO);
System.out.println("===========!항목별 문항 정보!===========");
List<VEAQestnrVO> chasiSrvyList = p_vEALettnQestnrMIXService.selectDetail_MIX_LQI_05(vEAQestnrVO);
if(chasiSrvyList.size() > 0) {
@ -187,6 +197,7 @@ public class QustnrCommonUtil {
)throws Exception{
//설문지 정보
System.out.println("===========!개별만족도정보!===========");
System.out.println("===========!설문지정보!===========");
VEAQestnrVO vEAQestnrVO = new VEAQestnrVO();
vEAQestnrVO.setSiteId(p_siteId); //청소년

View File

@ -1339,7 +1339,6 @@ public class CndtnPrcsInfoMngController {
model.addAttribute("instrAsgnmList", instrAsgnmList);
}
//설문 문항 정보
try {
model = qustnrCommonUtil._qustnrQesItm(
@ -1371,7 +1370,8 @@ public class CndtnPrcsInfoMngController {
model.addAttribute("Comtnqustnrqesitm", egovQustnrRespondInfoService.selectQustnrRespondInfoManageComtnqustnrqesitm(commandMap));
*/
try{
//설문조사 결과(?)
try{
model = qustnrCommonUtil._chasiSrvyList(
model
, LCTR_DIV_CD //청소년 -10, 성인-20, ...VE0012

View File

@ -16,6 +16,9 @@ public interface VEALettnQestnrMIXService {
//관리자 청소년,성인 - 만족도 평가
List<VEAQestnrVO> selectDetail_MIX_LQI_03(VEAQestnrVO paramVO) throws Exception; // R
//관리자 청소년,성인 - 만족도 평가
List<VEAQestnrVO> selectDetail_MIX_LQI_03_ALL(VEAQestnrVO paramVO) throws Exception; // R
//관리자 청소년,성인 - 개별 만족도 리스트
List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception; // R

View File

@ -28,6 +28,11 @@ public class VEALettnQestnrMIXDAO extends EgovAbstractDAO {
return tlist;
}
public List<VEAQestnrVO> selectDetail_MIX_LQI_03_ALL(VEAQestnrVO paramVO) throws Exception {
List<VEAQestnrVO> tlist = (List<VEAQestnrVO>) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_03_ALL", paramVO);
return tlist;
}
public List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception {
List<VEAQestnrVO> tlist = (List<VEAQestnrVO>) list("VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04", paramVO);
return tlist;

View File

@ -36,6 +36,11 @@ public class VEALettnQestnrMIXServiceImpl implements VEALettnQestnrMIXService {
return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_03(paramVO);
}
//관리자 (청년, 성인) 만족도 평가
public List<VEAQestnrVO> selectDetail_MIX_LQI_03_ALL(VEAQestnrVO paramVO) throws Exception{
return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_03_ALL(paramVO);
}
//관리자 (청년, 성인) 만족도 평가
public List<VEAQestnrVO> selectDetail_MIX_LQI_04(VEAQestnrVO paramVO) throws Exception{
return vEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04(paramVO);

View File

@ -366,6 +366,27 @@
</select>
<!-- //관리자 청소년/성인 만족도 평가 R -->
<select id="VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_03_ALL" parameterClass="VEAQestnrVO" resultClass="VEAQestnrVO">
/* VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_03_ALL */
SELECT c00.qustnr_qesitm_id as qustnrQesitmId
, c00.very_satisfied AS verySatisfied
, c00.satisfied AS satisfied
, c00.neither AS neither
, c00.dissatisfied AS dissatisfied
, c00.very_dissatisfied AS veryDissatisfied
, c00.answer
FROM
LETTNQESTNRRSLTDetail c00 ,
ve_edu_aplct d00
WHERE
d00.prcs_ord = #eduAplctOrd#
AND d00.EDU_APLCT_ORD = c00.edu_aplct_ord
</select>
<!-- //관리자 청소년/성인 만족도 평가 R -->
<select id="VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04" parameterClass="VEAQestnrVO" resultClass="VEAQestnrVO">
/* VEALettnQestnrMIXDAO.selectDetail_MIX_LQI_04 */

View File

@ -1113,41 +1113,116 @@
</colgroup>
<thead>
<tr>
<th scope="col">평가문항</th>
<th scope="col">매우만족</th>
<th scope="col">만족</th>
<th scope="col">보통</th>
<th scope="col">불만족</th>
<th scope="col">매우불만족</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
<!-- 문항정보 -->
<c:forEach items="${Comtnqustnrqesitm}" var="QestmInfo" varStatus="status1">
<c:forEach items="${chasiSrvyList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<!-- 문항별 질문 정보 -->
<c:forEach items="${chasiSrvyItemList}" var="chasiSrvyItemInfo" varStatus="">
<c:if test="${chasiSrvyItemInfo.qustnrQesitmId eq QestmInfo.qestnrQesitmId}">
<tr>
<td>객관식질문</td>
<td>${chasiSrvyItemInfo.sn1}</td>
<td>${chasiSrvyItemInfo.sn2}</td>
<td>${chasiSrvyItemInfo.sn3}</td>
<td>${chasiSrvyItemInfo.sn4}</td>
<td>${chasiSrvyItemInfo.sn5}</td>
</tr>
</c:if>
</c:forEach>
<!-- 답변정보 -->
<c:set var="a1" value="0"/>
<c:set var="a2" value="0"/>
<c:set var="a3" value="0"/>
<c:set var="a4" value="0"/>
<c:set var="a5" value="0"/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="a1" value="${a1 + chasiSrvyInfo.verySatisfied}"/>
<c:set var="a2" value="${a2 + chasiSrvyInfo.satisfied}"/>
<c:set var="a3" value="${a3 + chasiSrvyInfo.neither}"/>
<c:set var="a4" value="${a4 + chasiSrvyInfo.dissatisfied}"/>
<c:set var="a5" value="${a5 + chasiSrvyInfo.veryDissatisfied}"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${chasiSrvyInfo.verySatisfied}"/>
<c:out value="${a1}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.satisfied}"/>
<c:out value="${a2}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.neither}"/>
<c:out value="${a3}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.dissatisfied}"/>
<c:out value="${a4}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.veryDissatisfied}"/>
<c:out value="${a5}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<!-- 답변정보 -->
<c:set var="answer1" value=""/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="answer1" value="${answer1}${chasiSrvyInfo.answer}
"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${fn:replace(answer1, '
', '<br/>')}" escapeXml="false"/>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
</tr>
</c:if>
</c:forEach>
</tbody>
</table>
</div>

View File

@ -1178,60 +1178,106 @@
</tr>
</thead>
<tbody>
<!-- 문항정보 -->
<c:forEach items="${Comtnqustnrqesitm}" var="QestmInfo" varStatus="status1">
<c:forEach items="${chasiSrvyList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<!-- 문항별 질문 정보 -->
<c:forEach items="${chasiSrvyItemList}" var="chasiSrvyItemInfo" varStatus="">
<c:if test="${chasiSrvyItemInfo.qustnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<tr>
<td>객관식질문</td>
<td>${chasiSrvyItemInfo.sn1}</td>
<td>${chasiSrvyItemInfo.sn2}</td>
<td>${chasiSrvyItemInfo.sn3}</td>
<td>${chasiSrvyItemInfo.sn4}</td>
<td>${chasiSrvyItemInfo.sn5}</td>
</tr>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<tr>
<td>주관식질문</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</c:if>
<c:if test="${chasiSrvyItemInfo.qustnrQesitmId eq QestmInfo.qestnrQesitmId}">
<tr>
<td>객관식질문</td>
<td>${chasiSrvyItemInfo.sn1}</td>
<td>${chasiSrvyItemInfo.sn2}</td>
<td>${chasiSrvyItemInfo.sn3}</td>
<td>${chasiSrvyItemInfo.sn4}</td>
<td>${chasiSrvyItemInfo.sn5}</td>
</tr>
</c:if>
</c:forEach>
<!-- 답변정보 -->
<c:set var="a1" value="0"/>
<c:set var="a2" value="0"/>
<c:set var="a3" value="0"/>
<c:set var="a4" value="0"/>
<c:set var="a5" value="0"/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="a1" value="${a1 + chasiSrvyInfo.verySatisfied}"/>
<c:set var="a2" value="${a2 + chasiSrvyInfo.satisfied}"/>
<c:set var="a3" value="${a3 + chasiSrvyInfo.neither}"/>
<c:set var="a4" value="${a4 + chasiSrvyInfo.dissatisfied}"/>
<c:set var="a5" value="${a5 + chasiSrvyInfo.veryDissatisfied}"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${chasiSrvyInfo.verySatisfied}"/>
<c:out value="${a1}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.satisfied}"/>
<c:out value="${a2}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.neither}"/>
<c:out value="${a3}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.dissatisfied}"/>
<c:out value="${a4}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.veryDissatisfied}"/>
<c:out value="${a5}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<!-- 답변정보 -->
<c:set var="answer1" value=""/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="answer1" value="${answer1}${chasiSrvyInfo.answer}
"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${fn:replace(answer1, '
', '<br/>')}" escapeXml="false"/>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
</tr>
</c:if>
</c:forEach>
</tbody>
</table>
</div>

View File

@ -265,65 +265,93 @@
</th>
<td style="text-align:left;">
<label for="verySatisfied_${status1.index}" class="label">매우만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="매우만족" id="verySatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="5"
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<c:if test="${not empty QestmInfo.answer5}">
<label for="verySatisfied_${status1.index}" class="label">매우만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="매우만족" id="verySatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="5"
<c:if test="${QestmInfo.verySatisfied eq 1}">
checked
</c:if>
<c:if test="${QestmInfo.verySatisfied eq 1}">
checked
</c:if>
>
${QestmInfo.answer5}
<br/>
>
${QestmInfo.answer5}
<br/>
</c:if>
<label for="satisfied_${status1.index}" class="label">만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="만족" id="satisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="4"
<c:if test="${not empty QestmInfo.answer4}">
<c:if test="${QestmInfo.satisfied eq 1}">
checked
</c:if>
<label for="satisfied_${status1.index}" class="label">만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="만족" id="satisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="4"
>
${QestmInfo.answer4}
<br/>
<c:if test="${QestmInfo.satisfied eq 1}">
checked
</c:if>
<label for="neither_${status1.index}" class="label">보통</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="보통" id="neither_${status1.index}" name="resultList[${status1.index}].responseRadio" value="3"
>
${QestmInfo.answer4}
<br/>
<c:if test="${QestmInfo.neither eq 1}">
checked
</c:if>
</c:if>
<c:if test="${not empty QestmInfo.answer3}">
>
${QestmInfo.answer3}
<br/>
<label for="neither_${status1.index}" class="label">보통</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="보통" id="neither_${status1.index}" name="resultList[${status1.index}].responseRadio" value="3"
<label for="dissatisfied_${status1.index}" class="label">불만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="불만족" id="dissatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="2"
<c:if test="${QestmInfo.neither eq 1}">
checked
</c:if>
<c:if test="${QestmInfo.dissatisfied eq 1}">
checked
</c:if>
>
${QestmInfo.answer3}
<br/>
</c:if>
>
${QestmInfo.answer2}
<br/>
<c:if test="${not empty QestmInfo.answer2}">
<label for="dissatisfied_${status1.index}" class="label">불만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="불만족" id="dissatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="2"
<label for="veryDissatisfied_${status1.index}" class="label">매우불만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="매우불만족" id="veryDissatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="1"
<c:if test="${QestmInfo.dissatisfied eq 1}">
checked
</c:if>
<c:if test="${QestmInfo.veryDissatisfied eq 1}">
checked
</c:if>
>
${QestmInfo.answer2}
<br/>
</c:if>
<c:if test="${not empty QestmInfo.answer1}">
<label for="veryDissatisfied_${status1.index}" class="label">매우불만족</label>
<input type="radio" numberOnly class="popupInput" style="width: 20px;padding:0 5px;text-align:center;"
title="매우불만족" id="veryDissatisfied_${status1.index}" name="resultList[${status1.index}].responseRadio" value="1"
<c:if test="${QestmInfo.veryDissatisfied eq 1}">
checked
</c:if>
>
${QestmInfo.answer1}
<br/>
</c:if>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<div class="radio_wrap">
<span>
<label>
<input type="text" numberOnly class="popupInput check-input" style="width: 50%;"
id="answer" name="answer" value="<c:out value="${QestmInfo.answer}" />">
</label>
</span>
</div>
</c:if>
>
${QestmInfo.answer1}
<br/>
</td>
</tr>
</c:forEach>

View File

@ -1100,41 +1100,116 @@
</colgroup>
<thead>
<tr>
<th scope="col">평가문항</th>
<th scope="col">매우만족</th>
<th scope="col">만족</th>
<th scope="col">보통</th>
<th scope="col">불만족</th>
<th scope="col">매우불만족</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
<th scope="col">-</th>
</tr>
</thead>
<tbody>
<!-- 문항정보 -->
<c:forEach items="${Comtnqustnrqesitm}" var="QestmInfo" varStatus="status1">
<c:forEach items="${chasiSrvyList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qestnrQesitmId}">
<c:if test="${QestmInfo.qestnTyCode eq '1'}">
<!-- 문항별 질문 정보 -->
<c:forEach items="${chasiSrvyItemList}" var="chasiSrvyItemInfo" varStatus="">
<c:if test="${chasiSrvyItemInfo.qustnrQesitmId eq QestmInfo.qestnrQesitmId}">
<tr>
<td>객관식질문</td>
<td>${chasiSrvyItemInfo.sn1}</td>
<td>${chasiSrvyItemInfo.sn2}</td>
<td>${chasiSrvyItemInfo.sn3}</td>
<td>${chasiSrvyItemInfo.sn4}</td>
<td>${chasiSrvyItemInfo.sn5}</td>
</tr>
</c:if>
</c:forEach>
<!-- 답변정보 -->
<c:set var="a1" value="0"/>
<c:set var="a2" value="0"/>
<c:set var="a3" value="0"/>
<c:set var="a4" value="0"/>
<c:set var="a5" value="0"/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="a1" value="${a1 + chasiSrvyInfo.verySatisfied}"/>
<c:set var="a2" value="${a2 + chasiSrvyInfo.satisfied}"/>
<c:set var="a3" value="${a3 + chasiSrvyInfo.neither}"/>
<c:set var="a4" value="${a4 + chasiSrvyInfo.dissatisfied}"/>
<c:set var="a5" value="${a5 + chasiSrvyInfo.veryDissatisfied}"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${chasiSrvyInfo.verySatisfied}"/>
<c:out value="${a1}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.satisfied}"/>
<c:out value="${a2}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.neither}"/>
<c:out value="${a3}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.dissatisfied}"/>
<c:out value="${a4}"/>
</td>
<td>
<c:out value="${chasiSrvyInfo.veryDissatisfied}"/>
<c:out value="${a5}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<c:if test="${QestmInfo.qestnTyCode eq '2'}">
<!-- 답변정보 -->
<c:set var="answer1" value=""/>
<c:forEach items="${chasiSrvyAllList}" var="chasiSrvyInfo" varStatus="">
<c:if test="${QestmInfo.qestnrQesitmId eq chasiSrvyInfo.qustnrQesitmId}">
<c:set var="answer1" value="${answer1}${chasiSrvyInfo.answer}
"/>
</c:if>
</c:forEach>
<tr>
<th scope="row" class="t_left">
${status1.count}) <c:out value="${QestmInfo.qestnCn}" escapeXml="true" />
</th>
<td>
<c:out value="${fn:replace(answer1, '
', '<br/>')}" escapeXml="false"/>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
</tr>
</c:if>
</c:forEach>
</tbody>
</table>
</div>