반응형
window.onpageshow = function(event) {
    if ( event.persisted || (window.performance && window.performance.navigation.type == 2)) {
        // Back Forward Cache로 브라우저가 로딩될 경우 혹은 브라우저 뒤로가기 했을 경우
        alert('에러');
    }
}

뒤로가기했을때, 로딩될 화면에 설정해주면된다.

반응형

 

반응형
반응형

나는, 상품구매 버튼을 누르면, 로그인 이후에 이용이 가능하다는 alert창과 함께 location href로 페이지를 /login 으로 이동해줄꺼다. 로그인 후에, 상품구매로 가길 원했기 때문에 거기로 다시 보내줄 꺼다.

var goURL = "/user/list?pItem=" +tomato;	// 이동하려는 URL
c_confirm("알림", "로그인 후 이용해주세요.", "확인", "non", 400, function(result) {
    location.href="/login?nextUrl="+encodeURIComponent(goURL);
});

먼저, 이동을 원하는 URL 을 먼저 설정하고, 

location.href="/login?nextUrl="+encodeURIComponent('원래 원했던 페이지이동 URL');

반응형
반응형

 

<tr>
    <th scope="row">첨부파일</th>
    <td colspan="3">
        <div class="file-upload type03 fix-width">
            <label for="files" class="btn default"><span>파일 업로드</span></label>
            <input type="file" id="files" class="file-input" name="files[]" multiple />
            <c:if test="${noticeInfoMap.fileList ne null}">
                <c:forEach var="fileList" items="${noticeInfoMap.fileList}">
                    <div class="pip" id="atchFileSn${fileList.atchFileSn }">
                        <img class="imageThumb" src="/images/admin/cmpt/file-ico.png">
                        <span class="file-tit"><a href="javascript:void(0);" onclick="downloadFileBtn(${fileList.atchFileSn}, 'FILE04')">${fileList.orgnFileNm}</a></span>
                        <button type="button" class="remove" onclick="removeFileIcon(this, ${fileList.atchFileSn})">
                            Remove image
                        </button>
                    </div>
                </c:forEach>
            </c:if>
        </div>
    </td>
</tr>
var noticeData = new FormData();
var deletedFileSn = '';

// 첨부파일 삭제
function removeFileIcon(obj, atchFileSn){
    $(obj).parent(".pip").remove();
    var fileName = $(obj).parent('.pip').find('.file-tit').text();

    // 새로 추가된 파일일 경우에만,
    if(atchFileSn == undefined || atchFileSn == null || atchFileSn == ''){
        for(i=0; i<fileArr.length; i++){
            if(fileArr[i].name == fileName){
                fileArr.splice(i, 1);
            }
        }
    // 이미 존재하던 파일을 삭제했을 경우, 삭제한 파일의 SN 담기
    }else{
        if(deletedFileSn == ''){
            deletedFileSn = atchFileSn;
        }else{
            deletedFileSn = deletedFileSn +','+ atchFileSn;
        }
    }
   
}

// 수정
function updateNotice(){

    for(var i=0; i < fileArr.length; i++){
        noticeData.append("addAttachedFile", fileArr[i]);
    }

    // 기존 등록되어있는 파일을 삭제한 경우
    if(deletedFileSn != ''){
        noticeData.append('deletedFileSn', deletedFileSn);
    }
    noticeData.append("brdMngSn", noticeInfo);

    $.ajax({
        url : 원하는 url,
        type: 'POST',
        data: noticeData,
        enctype: 'multipart/form-data',
        dataType : 'json',
        processData: false,
        contentType: false,
        success : function(data) {
        },
        error : function(data){
        }
    })
}

기존에는 

이미 존재하던 파일을 삭제했을 경우, 삭제한 파일의 SN을 [ ] array 에 담아서 수정 function 에서 FormData로 선언되어진 noticeData에 append 를 이용해서 array 자체를 담아서 보냈다.

그래서 java 단에서 받아온 map을 키로 찾아서 List 로 cast를 시도했는데, String 을 List로 cast 할 수 없다며 에러가 발생했다. 그래서 Object자체를 그대로 받아오지 못하는 것 같았다.

그래서 말씀드리니, Deep Copy 를 해야한다고 하셧다. 근데 그거는 오히려 너 복잡할 수 있어서. array 로 보내지않고

결 국, 해결 방법!!!

[ 값, 값] 이런식으로 담아서 보냈다.

그걸 사용한 부분이

반응형
// 첨부파일 삭제
function removeFileIcon(obj, atchFileSn){
    if(deletedFileSn == ''){
        deletedFileSn = atchFileSn;
    }else{
        deletedFileSn = deletedFileSn +','+ atchFileSn;
    }
}

이부분!

그래서 자바단에서 split을 이용해 String[] 의 형식으로 바꿔 사용해서 List를 대체해서 사용했다!!!!

java

public HashMap<String, Object> updateBoard(HashMap<String, Object> map, MultipartHttpServletRequest request){
    HashMap<String, Object> resultMap = new HashMap<String, Object>();
    // 기존파일 삭제 정보가 존재하면, delete
    if(map.get("deletedFileSn") != null) {
        // , 를 기준으로 잘라서 String만 받아와서  [] array 화 시켜 담음
        String[] deletedFileList = map.get("deletedFileSn").toString().split(",");

        for(String deletedFileSn : deletedFileList) {
            fileInfoMap.put("atchFileSn", deletedFileSn);
        }
    }
    return resultMap;
}

 

반응형
반응형

1. tag 추가

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

2. 오늘날짜 설정

$(function() {
    // 날짜 비교 위한 날짜 가져오기
    <c:set var="now" value="<%=new java.util.Date() %>" />
    <fmt:formatDate var="today" value="${now}" pattern="yyyy-MM-dd hh:mm:ss" />
    var todayDate = "<c:out value='${today}'/>";
});

<c:if test="${today > 비교하고자하는 날짜}"/>

이런식으로 사용해도 된다!

반응형
반응형
$('input.timepicker').timepicker({
		        timeFormat: 'h:mm',
		        interval: 30,
		        minTime: '9',
		        maxTime: '18:00',
		        defaultTime: "09",
		        startTime: "09:00",
		        dynamic: false,
		        dropdown: true,
		        scrollbar: true
		    });

원래 는 이거였는데,

아무리 value 값을 jquery 로 넣어줘도 안되더라. 그래서 저기서 defaultTime 의 값에 넣어줘봣다. 변수로 선언해서

var startTimeVal = '09:00';
// 만약 바꾸기 원하는 값이 존재하면, 그 값을 변수에 넣어주기
if(infoMap != null && infoMap != undefined){
    startTimeVal = infoMap.eduBgngTm;
}else{
    startTimeVal = "09:00";
}


$('input.timepicker').timepicker({
    timeFormat: 'h:mm',
    interval: 30,
    minTime: '9',
    maxTime: '18:00',
    defaultTime: startTimeVal,	// 여기에 그 변수 넣어주기
    startTime: "09:00",
    dynamic: false,
    dropdown: true,
    scrollbar: true
});

그랫더니!!!

선택이 잘되어 나왔다!!

반응형
반응형

이벤트로 생성된 버튼의 객체만 가져오기.

즉, 아래처럼 '추가' 버튼을 누르면 아래의 input박스와 함께 '찾기'버튼과 '삭제'버튼이 함께 생긴다. 

이벤트로 생성된 버튼은 버튼들은 모두 같은 속성을 가지고있다. 같은 class, name, id 명을 가지고있다. 그래서 속성을 지정해서 버튼 이벤트를 걸어주면 제일 첫번째거 하나만 이벤트가 걸린다.

그래서 동적으로 생성된 버튼을 다시 읽어줘야하기때문에, DOM 객체를 버튼 이벤트걸어주기전에 한번 더 다시 읽어주면된다. DOM 객체를 읽어오는 $(document).ready(function(){}) 을 사용하는 것보다 $(document).on('이벤트명', '객체명', function(){}) 을 사용할 것을 추천함!

지금 5번은 사용한 것 같은데, 계속 까먹는 것 같아서 기록해둔다.

 

반응형

 

반응형
반응형

Controller에서 addObject를 이용해서 List객체를 넘겨줬다. 저 getPerformanceOneWeek() 은 List<HashMap<String,Object>> 이다.

반복되고자하는 하는 부분은 <c:forEach>태그로 감싸주고

var : 내가 jsp파일에서 가져와서 대체해서 사용할 그 List의 명칭,
items :  Controller에서 보내줄 때의 객체 이름
varStatus : 반복되는 수라고 생각하면됨.

그래서 나는 List안에 HashMap으로 되어있기 떄문에 객체 이름 적고 . key 값 적어주면 값가져와준다!

ajax로 보낼까 생각했는데 Controller로 한번에 받는게 좋다고 하셔서 addObject와 JSTL을 이용해서 사용했다!

taglib에 이아이가 꼭 있는지 먼저 확인하자!! 나는 여기서 varStatus는 사용하지 않았다. 

 

 

반응형
반응형

< break >

for문이 반복되다가, break가 있는 조건을 만나자마자 for이 강제적으로 종료되고 그 뒤의 값들은 돌지 않게 된다.

< continue >

for문이 반복되다가 continue가 있는 조건을 만나면 그 조건일 때는 for문이나 다른 continue가 있지 않은 다른 조건을 실행하지않고 건너뛴다. 그러고 다시 다음건이 진행된다.

< return >

return 도 함수를 종료시켜주는 역할이라 사용했다가, 계속 헤맸다. 결국 말그대로 return 은 함수를 종료시켜주기 때문에, 이 뒤에 있는 어떠한 로직들도 모두 다 실행되지가 않아져버린다. 해당하는 for문만 종료시키기 위해서는 break를 사용해주면된다!!

반응형

+ Recent posts