sql문에 출력값이 한글로 하드코딩되어서 언어변경시에도 한글값만 출력되는 문제

keep_going·2023년 7월 26일
0

문제해결

목록 보기
36/36
  • 문제
    jsp 파일에 아래와 같이 코딩되어있었는데 xml파일에서 sql문을 보니 studyStatusCd값이 하드 코딩 되어 있었고 실제 출력하는 부분은 ${vo1.lessonTypeCd eq 'ONLINE'}문을 통과한 이후의 값이었으므로 sql문에 하드코딩된 '미학습'.. 등을 언어를 변환해도 한글 그대로 출력함
// lesson_std_attend_status_list.jsp
<c:choose>
  <c:when test="${vo1.studyStatusCd eq 'COMPLETE'}">
    <c:set var="color" value="fcRed"/>
      </c:when>
  <c:when test="${vo1.studyStatusCd eq 'STUDY'}">
    <c:set var="color" value="fcBlue"/>
      </c:when>
  <c:when test="${vo1.studyStatusCd eq 'NOSTUDY'}">
    <c:set var="color" value="fcGrey"/>
      </c:when>
  <c:otherwise>
    <c:set var="color" value="fcGrey"/>
      </c:otherwise>
 </c:choose>
<p class="author"><spring:message code="common.label.status"/> : 
  <c:if test="${vo1.lessonTypeCd ne 'ONLINE'}">
    <c:if test="${vo1.studyStatusCd eq 'NOSTUDY'}">
      <span class="${color}"><spring:message code='lesson.label.attend.offline.nostudy'/></span>
	</c:if>
	<c:if test="${vo1.studyStatusCd eq 'STUDY'}">
	  <span class="${color}"><spring:message code='lesson.label.attend.offline.study'/></span>
	</c:if>
	<c:if test="${vo1.studyStatusCd eq 'COMPLETE'}">
  	  <span class="${color}"><spring:message code='lesson.label.attend.offline.complete'/></span>
	</c:if>
  </c:if>
  <c:if test="${vo1.lessonTypeCd eq 'ONLINE'}">
  	<span class="${color}">${vo1.studyStatusCdNm}</span>
    (<spring:message code="lesson.learning.in.period"/> : ${vo1.studyTotalTmMs}, 
      <spring:message code="lesson.learning.out.period"/> : ${vo1.studyAfterTmMs})
  </c:if>
</p> 
// LessonMapper_SQL.xml
, (CASE WHEN M1.OPEN_YN = 1 AND NVL(M1.STD_NO,'NOSTUDY')          = 'NOSTUDY'  THEN '미학습'   /* 오픈은 했는데 학생 정보 없는 경우 미학습 */
	    WHEN M1.OPEN_YN = 1 AND NVL(M1.STUDY_STATUS_CD,'NOSTUDY') = 'COMPLETE' THEN '학습완료'
	    WHEN M1.OPEN_YN = 1 AND NVL(M1.STUDY_STATUS_CD,'NOSTUDY') = 'STUDY'    THEN '학습중'
	    WHEN M1.OPEN_YN = 1 AND NVL(M1.STUDY_STATUS_CD,'NOSTUDY') = 'NOSTUDY'  THEN '미학습'
	    ELSE '-'
   END) as STUDY_STATUS_CD_NM
  • 해결
    우선 c:choose문은 아래 if문에 따라서 class 값을 할당해주기 위해 작성된 것으로 보이나 결국 분기별로 class에 color를 넣어야 하므로 일일히 class값을 넣는거와 별 차이 없다고 느꼈으므로(3가지 경우의 수 밖에 없으므로) 제거해줌
    그리고 sql문에서 한글로 하드코딩된 부분을 NOSTUDY, STUDY, COMPLETE로 영어로 하드코딩했는데 그 이유는 lessonTypeCd값이 ONLINE일때와 아닐때를 분기로 하고 있으나 그 이후에 studyStatusCdNm 값을 읽어오는건 동일한데 ONLINE이 아닐때는 영어로 읽어와서 spring message로 출력하고 ONLINE일때는 sql문에 박힌 값을 그대로 가져오는게 문제였으므로 동일하게 영어로 값을 읽어와서 spring message로 출력하도록 수정해줌
    여기서 ONLINE이 아닐때(OFFLINE)와 ONLINE일때 studyStatusCdNm값은 동일하더라도 spring message로 출력되는 값은 달라져야 하는데 OFFLINE인 경우의 데이터를 찾지 못해서 ONLINE의 경우와 동일한 메세지를 출력하는 실수를 했으나 깃허브에 있던 원래 spring message를 참고하여 값이 다름을 발견했다. 이런 경우도 있으니 스프링 메세지 값을 꼭 확인할것!
 <p class="author"><spring:message code="common.label.status"/> : 
   <c:if test="${vo1.lessonTypeCd ne 'ONLINE'}">
     <c:if test="${vo1.studyStatusCdNm eq 'NOSTUDY'}">
       <span class="fcGrey"><spring:message code='lesson.label.attend.offline.nostudy'/></span> <!-- 결석 -->
     </c:if>
   	 <c:if test="${vo1.studyStatusCdNm eq 'STUDY'}">
       <span class="fcBlue"><spring:message code='lesson.label.attend.offline.study'/></span> <!-- 지각 -->
     </c:if>
     <c:if test="${vo1.studyStatusCdNm eq 'COMPLETE'}">
       <span class="fcRed"><spring:message code='lesson.label.attend.offline.complete'/></span> <!-- 출석 --> 
     </c:if>
   </c:if>
   <c:if test="${vo1.lessonTypeCd eq 'ONLINE'}">
     <c:if test="${vo1.studyStatusCdNm eq 'NOSTUDY'}">
       <span class="fcGrey"><spring:message code='lesson.label.nostudy'/></span> <!-- 미학습 -->
     </c:if>
     <c:if test="${vo1.studyStatusCdNm eq 'STUDY'}">
       <span class="fcBlue"><spring:message code='lesson.label.study'/></span> <!-- 학습중 --> 
     </c:if>
     <c:if test="${vo1.studyStatusCdNm eq 'COMPLETE'}">
       <span class="fcRed"><spring:message code='lesson.label.complete'/></span> <!-- 학습완료 --> 
     </c:if>
       (<spring:message code="lesson.learning.in.period"/> : ${vo1.studyTotalTmMs}, 
       	<spring:message code="lesson.learning.out.period"/> : ${vo1.studyAfterTmMs})
   </c:if>
</p> 
profile
keep going

0개의 댓글