본문 바로가기

꿈(개발)

오늘의 지식!!!!!!!!!

오늘 하루종일 붙들고 있었던 <button> 태그, jstl, javascript와의 싸움!!!!

설문조사의 종료날자와 오늘 날짜를 비교해서 종료일이 오늘 이전 이라면

'설문참여 기간이 지났습니다.' 라는 경고창을 띄우고 <button> 을 비활성화 하려는게 제 목적이었습니다.

처음에 javascript로 끝내야지 했는데,
(jstl로 날짜비교가 되는줄 몰랐어요, 오늘에서야 알았습니다!!!)
쉽게 안되더군요.

먼저 자바 스크립트로 만들어 보았던 소스 입니다.

function doToday(btn,end){
 var mydate = new Date();
 var year = mydate.getYear();
 
 if ( year < 1000 )
  year += 1900;
 
 var day = mydate.getDay();
 var month = mydate.getMonth()+1;
 
  if ( month < 10 )
   month = "0" + month; // select 해오는 종료날짜가 Date 타입이라 한자리수 월에는 0을 붙여줍니다.
   
 var daym = mydate.getDate()
 
  if ( daym < 10 )
   daym = "0" + daym;
 
 var todayDate = year+month+daym; // 오늘날짜를 담아둡니다.
 var endDate = end;
 <c:forEach items="${searchResult}" var="i">  // 설문목록을 담아 놓습니다.
  <c:if test="${i.participation == '미참여'}"> // 개중에 회원이 미참여한 설문만 적용합니다.
 
  if ( (endDate - todayDate) >= 0 ) { // 종료날짜-오늘날짜가 0이거나 크다면 참여 할 수 있어야겠죠^^
   fireFlowEvent('join', { surveySeq:'${i.surveySeq}' }); //참여!!
   return true;
  } else if ( (endDate - todayDate) < 0  ) { //종료날짜-오늘날짜가 0 미만이면 참여 불가
   alert('설문조사 기간이 아닙니다.');
   btn.disabled = true; // 참여버튼 비활성
   return true;
  }
 
  </c:if>
 </c:forEach> // 미참여한 설문 목록만큼 생성 되겠습니다.
}

요걸 
<button name="btn_${i.surveySeq}" type="button" class="btn1_4" onclick="doToday(this,<fmt:formatDate value="${i.svyEndDate}" pattern="yyyyMMdd"/>);">설문참여</button>
에다 onclick 이벤트로 호출 합니다.

잘되는데!!!!!!! 제가 뭘 잘못 했는지 return true를 타서 날짜지난건 지났다 뜨는데,
바로 밑의 참여 기간이 남아있는 녀석을 눌러도 날짜지난 설문을 타더군요.....
그래서 아 이럴바에 차라리 jstl로 처리해보자.(이때까지도 날짜 비교는 생각도 못했습니다.)

우선 오늘을 구하기 위해서
<%
Date dt = new Date();
SimpleDateFormat dy = new SimpleDateFormat( "yyyy" );
SimpleDateFormat dm = new SimpleDateFormat( "MM" );
SimpleDateFormat dd = new SimpleDateFormat( "dd" );
%>

이제 구했으니 jstl로 변수 지정해줘야겠죠?
<c:set var="doToday" value="<%= dy.format( dt )+dm.format( dt )+dd.format( dt )%>"/>
이렇게 하드코딩으로 집어 넣었습니다.
아하 어쩌지 오늘 날짜는 '20080227' 가 되는데!!!!!!!!
select 해오는 종료날짜는 2008-02-27 00:00:00 0. 이 나오네요
이럴순 없죠!
그래서 jstl:fn을 썼습니다.
fn:substring(fn:replace(i.svyEndDate, "-", ""),-1,8)  두번 써서 20080227을 만들었습니다.
-,.- 그런데 이게 왠일!!!!
그냥 ${fn:substring(fn:replace(i.svyEndDate, "-", ""),-1,8)} 에 넣었을땐 잘나오더니
<c:set> 에다 넣으니 인식할 수 없다네요...
그래서 에라 모르겠다. 마지막 동아줄을 잡았습니다. '설마 날짜비교가 될라고-,.-'

<c:set var="doToday" value="<%= dy.format( dt )+"-"+dm.format( dt )+"-"+dd.format( dt )%>"/>
<c:set var="endDate" value="${ fn:substring(i.svyEndDate,-1,10) }" />


이 두 변수를 비교 해봤습니다.

       <c:if test="${ endDate >= doToday }">
       <button type="button" class="btn1_4" onclick="fireFlowEvent('join', { surveySeq:'${i.surveySeq}' });">설문참여</button>
       </c:if>
       <c:if test="${ endDate < doToday }">
       <button type="button" class="btn1_4" onclick="alert('설문참여 기간이 지났습니다.'); this.disabled=true;" title="설문참여 기간이 지났습니다.">설문참여</button>
       </c:if>


되는군요!!!!! 잘되요!!!!!!!

jstl이 急호감 되버렸네요^^

이걸 오전 부터 이 시간까지 이러고 있으니 참 제꿈은 아직도 많이 멀기만 합니다.

개발자...개발자...입으로만 개발자 hwanyc 였습니다.