반응형

나는, 상품구매 버튼을 누르면, 로그인 이후에 이용이 가능하다는 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');

반응형
반응형

 

Add External Web Module

Document base에 tomcat의 root에 저장될 경로를 지정하고, web에서 src로 접근하고자하는 경로를 Path 에 적어주면 된다.

 

tomcat의 server.xml 에 Context 태그로 docBase가 알아서 수정이 되어있는걸 볼 수 있다!!!!!!

 

반응형
반응형

폴더 copy 할때의 명령어 cp 를 이용해서

cp copy하고자하는폴더명 새로운폴더명

으로 해주면 되는데, 자꾸 cp: omitting directory ‘copy하고자하는폴더명’ 이런 에러가 생기더라

이건, 자기자신을 재참조(?) 할 때, 사용한단다.

그래서 

cp -r 를 해주면 된다!

반응형
cp -r 복사원하는폴더명 복사될새로운폴더명

 

반응형
반응형

1. JSP 에서 map 형태로 테이터를 만든다.

var infoMap = {};
var duration = '';
var addr = '';

infoMap = {duration :duration,
            addr :addr};

 

2. JSP 에서 만든 map 을 JSON.strigify() 해준다.

var rotnInfoStr = JSON.stringify(infoMap);

 

3. FormData 에 붙여준다.

var programData = new FormData();
programData.append("keyName", rotnInfoStr);

 

 4. AJAX로 전송

$.ajax({
    headers: {},
    url : 보낼 URL 주소,
    type: 'POST',
    data: programData,
    contentType : 'application/json',
    enctype: 'multipart/form-data',
    dataType : 'json',
    processData: false,
    contentType: false,
    success : function(data) {
       
    },
    error : function(data){
        
    }
})

 

이제!!! Controller 단!!!

반응형

5. codehaus 를 이용해 Parsing 했당 (google 에서 제공하는 simple-json 을 사용해봤는데, 전자정부프레임워크를 사용해서 인지, 인식을 못하더라 그래서 codehaus를 이용함)

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;


@RequestMapping(value = 받는 URL 주소 , method = RequestMethod.POST)
@ResponseBody
public HashMap<String, Object> getFormDataTest(@RequestParam HashMap<String, Object> paramMap, MultipartHttpServletRequest request) {
    HashMap<String, Object> resultMap = new HashMap<String, Object>();
    if(paramMap != null) {
        String rotnMapString = paramMap.get("아까 적은 key 값").toString();
					
        try {
            ObjectMapper mapper = new ObjectMapper();
            resultMap = mapper.readValue(jsonString, new TypeReference<HashMap<String, Object>>() {});
        } catch (IOException e) {
            resultMap.put("isSuccess", isSuccess);
            resultMap.put("errorCode", "PARSING_ERROR");
            LOGGER.error("error occuring during parsing string to map in getMapFromString method. IOException error msg:{}", e.toString());
        }
    }
    return resultMap;
}

그러면 알아서 map 으로 잘 인식한다!!!!!

반응형
반응형

 

<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
});

그랫더니!!!

선택이 잘되어 나왔다!!

반응형
반응형

Interceptor.java

public class Interceptor extends HandlerInterceptorAdapter{
	
	private final static Logger LOGGER = LoggerFactory.getLogger(Interceptor.class);
	
	@Autowired
	AccessHistoryService accessHistoryService;
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
		HttpSession session = request.getSession();
		String ipAddress = Utils.getClientIp(request);
		
    	String prevURI = "";
    	
		if( request.getRequestURI() != null ) {
			if( session != null && session.getAttribute("prevURI") != null ) {
				LOGGER.debug("prev session:"+session.getAttribute("prevURI"));
				prevURI = session.getAttribute("prevURI").toString();
				if( request.getQueryString() != null ) prevURI += "?"+request.getQueryString();
				session.setAttribute("prevPrevURI", prevURI);
			}
			prevURI = request.getRequestURI();
			session.setAttribute("prevURI", prevURI);
			LOGGER.debug("URI =========================="+prevURI);
		}
		
		LOGGER.debug("preHandle =prevURI:"+prevURI);
        
		// 디바이스 종류
		String dvcType = "Desktop";
		if(request.getHeader("User-Agent") != null && request.getHeader("User-Agent").toUpperCase().indexOf("MOBILE") > 0 ) dvcType = "Mobile";
		
        // 접속한 브라우저 종류 가져오기
		String brwsType = Utils.getAccBrowserType(request);
		
		
		HashMap <String,Object> accHisMap = new HashMap<String, Object>();
		accHisMap.put("atryMbrId", "");						// 접속회원아이디
		accHisMap.put("cntnIpAddr", ipAddress);				// ip주소
		accHisMap.put("accUrlAddr", prevURI);				// uri 주소
		accHisMap.put("accPrmt", request.getQueryString());	// 접근 파라미터
		accHisMap.put("dvcType", dvcType);					// 디바이스 종류
		accHisMap.put("brwsType", brwsType);				// 브라우저 종류
		
        // 쿼리에 입력
		int res = accessHistoryService.insertAccessHistory(accHisMap);
		LOGGER.debug("acc history result:"+res);
	
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		super.postHandle(request, response, handler, modelAndView);
	}
	
}
반응형

context-properties.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
	
	<beans:bean name="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
		<beans:property name="properties">
	        <beans:map>
	        	<beans:entry key="pageUnit" value="10"/>
	        	<beans:entry key="pageSize" value="10"/>
	        </beans:map>
		</beans:property>
	</beans:bean>
	
	
	<!-- <util:properties id="server" location="/WEB-INF/properties/server.properties"/> -->
	<beans:bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<beans:property name="locations">
        	<beans:list>
       			<beans:value>/WEB-INF/properties/server.properties</beans:value> 
        	</beans:list>
        </beans:property>
		
	</beans:bean>
	
	<util:properties id="server" location="/WEB-INF/properties/server.properties"/>
	
    
    <!-- interceptor 설정 부분 -->
	<interceptors>
		<interceptor>
			<mapping path="/**"/>
			<exclude-mapping path="/resources/**"/>
			<beans:bean id="commonInterceptor" class="com.kyobo.kdkb.common.interceptor.Interceptor">
			</beans:bean>
		</interceptor>
	</interceptors>
		
</beans:beans>

 

끄읏

반응형

+ Recent posts