jquery 를 사용 하면 아래의 문법으로 시작 하게 된다.
가장 많이 쓰이는 방법이다.
$(document).ready(function() {
});
그런데 여기저기 jquery 를 사용한 사이트를 보면 아래와 같은 방법을 쓰는걸
볼수 있다.
코드량을 줄이기 위함이다.
$(function() {
});
위쪽을 더 많이 써서 그런지 더 가독성이 좋아 보인다.
Datejs 스크립트 날짜 관련 유용한 라이브러리
스크립트로 날짜를 계산 하면 정말 짜증 난다.
자료를 찾아서 해봐도 내가 원하는 결과는 쉽게 나오지 않는다.
다른 언어들은 편한데 스크립트는 복잡 하다.
그러다 datejs 라는걸 알게 되었다.
3일전 날자를 구하는걸 예로 들어 보겠다.
기존의 스크립트들은 아래와 같다.
var strDate1 = "2015-5-6";
var arr1 = strDate1.split('-');
var dat1 = new Date(arr1[0], arr1[1], arr1[2]);
document.write("* 현재날짜 : " + strDate1 + "<br/>");
document.write("* 3일 더하기 : " + dat1.getFullYear() + "-" + dat1.getMonth() + "-" + (dat1.getDate() + 3) + "<br/>");
document.write("* 3일 빼기 : " + dat1.getFullYear() + "-" + dat1.getMonth() + "-" + (dat1.getDate() - 3) + "<br/><br/>");
Datejs 은 아래와 같다.
Date.today().add(-3).day()
한줄로 끝나 버린다.
이걸 찾고 그동안 수차례 고생한 지난 일들이 생각 나며 억울 하다 ^^;
앞으로는 삽질 안해도 되겠군...
자세한 내용은 아래를 참고 하시길...
date.js 를 다운받아 프로젝트에 넣은후 사용 하면 됨.
소개 사이트
jquery 동적 테이블 click 이벤트 처리 delegate
jquery 로 클릭 이벤트 처리를 위해서 보통은 아래와 같은 방법으로 처리 한다.
$(".trashCan").click(function(){
console.log("ddddd");
});
하지만 동적테이블을 쓰게 되면 새로 만들어진 TR, TD 들은 클릭 이벤트가
되지 않는다.
그럴땐 아래처럼 delegate 를 사용하면
새로 만들어진 TR, TD 도 이벤트 처리가 잘된다.
$(document.body).delegate('.trashCan', 'click', function() {
console.log("ddddd");
});
별거 아닌거 같지만 막상 찾으려면 가끔은 검색이 잘 안된다.
맛집 이야기, 옥천군 찐한식당(맛있는 집)
여름휴가중 옥천근처를 지나갈 일이 있어서 갑자기 방문한 찐한식당.
사실 나는 민물고기를 별로 안좋아 한다.
그래도 지금 아니면 언제 가볼지 기약할수 없고 점심 먹을 아는 식당도 없었기에 가봤다.
11시쯤 도착 했는데 내가 첫손님 인듯?
한가하니 아주 좋았다.
내가 다 먹고 출발 할때쯤엔 손님들이 계속 도착 하는걸 보니 더 다행 ㅎ
가게옆에는 줄서는 사람들을 위해 의자를 놓은것 같다.
주말엔 줄을 서는 모양이다.
화장실은 보수한지 얼마 안되었는지 깨끗했다.
보통 오래된 식당들 화장실은 보통 더러워서 식당의 이미지가 급추락 한다.
많은 식당들이 화장실에 투자를 해주었으면...
이식당... TV에 많이 나왔다. 김탁구에도 나왔다니 신기하군.
역시 난 민물고기랑 안맞는걸 다시 느끼지만 먹을만 하다.
와이프는 맛나다고 했으니 맛있는걸로 ㅎ
이음식은 도리뱅뱅이다.
별생각 없이 먹었는데 아주 맛나다.
운전만 아니면 막걸리에 먹음 더 맛있었을텐데 아쉽다.
바삭한 생선과 매콤한 양념이 인상적이다.
와이프가 도리뱅뱅이에 술이 빠지면 안된다고 해서 막걸리를 하나 주문 했다.
지역막걸리 같은데 맛이 깔끔하니 아주 좋았다.
유통기한만 길다면 사오고 싶었지만 아쉽다...
난 운전 하닌깐 아주 쪼끔 혀만 담갔다. ^^;
요새는 TV 에 나오는 식당들 가보면 긴줄을 서야 하고 맛도 없는데
여기는 가볼만 하다.
하지만 줄을 서야 한다면 굳이 가진 않겠다.
위치:
대한민국 충청북도 옥천군
sql server 백업파일 다른이름으로 복원 명령문
특정한 다른이름 으로 복원 하려문 매니지먼트 에서 제공하는 복원 기능 으로는 안된다.
아래처럼 쿼리문 으로 해야한다.
-- 백업 파일 내용 확인
RESTORE FILELISTONLY
FROM DISK='D:\SPOT_HT.bak' -- 백업해둔 .BAK 파일 경로
-- 새로운 이름으로 데이터베이스 복원
RESTORE DATABASE [Spot_HT] --새롭게 복원할 DB명
FROM DISK='D:\SPOT_HT.bak' --백업해둔 .BAK 파일 경로
WITH RECOVERY,
MOVE 'SP_KC_O' TO 'D:\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Spot_HT.mdf', --MOVE 'HVI_2011'은 첫번째 LOCALNAME (PMS_Data)
MOVE 'SP_KC_O_log' TO 'D:\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Spot_HT.ldf', REPLACE --MOVE 'HVI_2011_LOG'는 2번째 LOGICALNAME (PMS_Log)
기존의 데이터베이스를 지우고 위의 명령어로 다시 만들었다면
해당 데이터베이스 연결시 에러가 날것이다.
이럴땐 아래 명령어로 해당 아이디를 업데이트 해줘야 한다.
sp_change_users_login 'update_one', 'spot', 'spot'
spring boot Interceptor 설정
spring boot Interceptor 설정 하는 방법 입니다.
생각 보다 간단 하네요.
우선 WebMvcConfig.java
package com.kr.spot.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/** * Created by ian on 2017. 7. 12.. */
@Configuration@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); }
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("views/");
resolver.setSuffix(".jsp");
return resolver;
}
/* 로그인 인증 Interceptor 설정 */
@Autowired
private com.kr.spot.system.LoginInterceptor loginInterceptor;
/* 캐시 Interceptor 설정 */
@Autowired
private com.kr.spot.system.CachingInterceptor cachingInterceptor;
/* 기본 Interceptor 설정 */
@Autowired
private com.kr.spot.system.BaseInterceptor baseInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/CO0301/**");
registry.addInterceptor(cachingInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/CO0301/**");
registry.addInterceptor(baseInterceptor)
.addPathPatterns("/**");
}
}
addPathPatterns 는 Interceptor 가 실행 되어야할 페이지 규칙
excludePathPatterns 는 Interceptor 가 실행 제외되어야할 페이지 규칙 입니다.
다음은 LoginInterceptor.java 입니다.
package com.kr.spot.system;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class LoginInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//로그인 정보 확인 및 처리
//1. 세션 정보 확인
if(request.getSession().getAttribute("sEmpNo") == null){
// 로그인 페이지 이동
logger.info( "go login page");
response.sendRedirect("/CO0301");
}
return true;
}
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub }
}
이렇게 하시면 됩니다.
크게 어려울건 없네요.
spring boot 설정 하면서 이게 제일 쉬운거 같네여 ㅜㅜ
생각 보다 간단 하네요.
우선 WebMvcConfig.java
package com.kr.spot.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/** * Created by ian on 2017. 7. 12.. */
@Configuration@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); }
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("views/");
resolver.setSuffix(".jsp");
return resolver;
}
/* 로그인 인증 Interceptor 설정 */
@Autowired
private com.kr.spot.system.LoginInterceptor loginInterceptor;
/* 캐시 Interceptor 설정 */
@Autowired
private com.kr.spot.system.CachingInterceptor cachingInterceptor;
/* 기본 Interceptor 설정 */
@Autowired
private com.kr.spot.system.BaseInterceptor baseInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/CO0301/**");
registry.addInterceptor(cachingInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/CO0301/**");
registry.addInterceptor(baseInterceptor)
.addPathPatterns("/**");
}
}
addPathPatterns 는 Interceptor 가 실행 되어야할 페이지 규칙
excludePathPatterns 는 Interceptor 가 실행 제외되어야할 페이지 규칙 입니다.
다음은 LoginInterceptor.java 입니다.
package com.kr.spot.system;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class LoginInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//로그인 정보 확인 및 처리
//1. 세션 정보 확인
if(request.getSession().getAttribute("sEmpNo") == null){
// 로그인 페이지 이동
logger.info( "go login page");
response.sendRedirect("/CO0301");
}
return true;
}
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub }
}
이렇게 하시면 됩니다.
크게 어려울건 없네요.
spring boot 설정 하면서 이게 제일 쉬운거 같네여 ㅜㅜ
피드 구독하기:
글 (Atom)
새로운 취미생활 RC TRX-6, UDR 영정사진들
서울에 살때는 RC카를 하고 싶어도 장소가 없어서 선뜻 시작이 어려웠다. 교외로 나가자면 차를 갖고 가야하고 최소 1시간은 나가야 할듯했다. 매번 이러다 보면 그횟수가 점점 줄어들어 포기 할까봐 시작하지 않았다. 하지만 전주로 이사와서 친구 한명...
-
특정 element 의 display 속성이 none 인지 아닌지 판단 할때 아래와 같이 사용 하면 쉽다. $('#myDiv').is(':visible'); display: none 일때는 false 를 반환...
-
예전부터 나의 작은 소망은 자전거로 출퇴근 이었다. 그런데 그렇게 하려면 자전거 보관이 제일 큰문제였다. 길거리에 세워 두자니 분명 도난 사고가 날거고 사무실에 놓자니 자전거가 너무 크고... 그래서 생각 한게 세상에서 가장 작게 폴딩...
-
가장 가성비 좋은 튜닝은 타이어 라고 하는 말이 있고 QM3 승차감이 별로라 타이어 끝판왕 이라는 미쉐린으로 장착 했습니다.(차에 비해 오버스펙 이네요...) 사이즈는 215/50/17 로 했습니다. 요새는 정보가 너무 많아서 ...