오늘 하루종일 붙들고 있었던 <button> 태그, jstl, javascript와의 싸움!!!!
설문조사의 종료날자와 오늘 날짜를 비교해서 종료일이 오늘 이전 이라면
'설문참여 기간이 지났습니다.' 라는 경고창을 띄우고 <button> 을 비활성화 하려는게 제 목적이었습니다.
처음에 javascript로 끝내야지 했는데,
(jstl로 날짜비교가 되는줄 몰랐어요, 오늘에서야 알았습니다!!!)
쉽게 안되더군요.
먼저 자바 스크립트로 만들어 보았던 소스 입니다.
요걸
<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로 처리해보자.(이때까지도 날짜 비교는 생각도 못했습니다.)
개발자...개발자...입으로만 개발자 hwanyc 였습니다.
설문조사의 종료날자와 오늘 날짜를 비교해서 종료일이 오늘 이전 이라면
'설문참여 기간이 지났습니다.' 라는 경고창을 띄우고 <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;
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> // 미참여한 설문 목록만큼 생성 되겠습니다.
<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이 急호감 되버렸네요^^
이걸 오전 부터 이 시간까지 이러고 있으니 참 제꿈은 아직도 많이 멀기만 합니다.
<%
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 였습니다.