화면마다 다른 검색툴바를 만들어야하는 일이 생겼다. 일일이 화면에 코딩하기도 번거러울 것 같고, 한번 만들어두면 두고두고 써먹을거 같아서 만들어 봤다. 단지 내가 필요해서 만든거고 코드도 완벽하지 않다. 차후 Ext JS를 더 깊이 이해하면 완벽하게 만들 수 있겠지 뭐.. 필요한건 검색툴바에 들어가야 할 xtype 이름들 뿐이다. 데이터를 불러올때 이 데이터를 사용하는 화면에서 쓸 xtype의 이름들을 같이 보내주면 된다. 아직은 너무나도 미완성이라 필요한 콤보박스나 체크박스, 라디오 버튼등이 필요하면 컴포넌트를 만들어서 추가해야한다 ㅋㅋㅋ 1 View source 우선은 xtype 이름이 담겨있는 배열을 받아서 툴바로 만들어주는 클래스소스이다. 이름은 내맘대로 툴바메이커로 정했다. 로직은 단순하게 xt..
1 glyph를 이용한 아이콘삽입 Ext JS에서는 "glyph" 라는 프로퍼티를 이용하여 아이콘을 넣을 수 있다. 탭이건 그리드이건 헤더부분에 이쁘장한 아이콘이 생기면 더 세련되 보이기도 하고, 각각 컴포넌트의 특징을 쉽게 파악 할 수 있을것 같다. 한가지 더 좋은점은 버튼같은 컴포넌트에서 "iconCls" 프로퍼티를 사용 안해도 된다는거다. 크기도 조정해야하고, 여러가지 번거러운 작업등을 안해도 된다는건 가장큰 메리트인것 같다.Ext JS에서 glyph를 사용하기 위해선 몇가지 작업을 해야한다. CSS 파일의 경로도 등록해 주어야하고, glyph로 사용할 아이콘들도 준비해야한다. 특이한건 이 glyph 에서 사용하는 파일들이 이미지나, ico같은 아이콘 파일이 아닌 폰트라는 점이다. eot, woff..
rowexpander 플러그인을 사용해서 하나의 로우를 확장하면 그안에 새로운 그리드가 존재하는 방식이다.. 가장 필요하면서 가장 알맞은 형태의 그리드인데 문제가 한두개가 아니다. 심각한 문제가.. 자식 그리드가 생성된 후 부모 그리드의 정렬을 하면 자식그리드가 사라지는가 하면 Height 설정을 안하면 그리드가 짤려서 나온다. Height 설정을 안했으니 사이즈 넘어가면 당연히 잘리는건가 싶었는데 브라우저 크기를 줄였다 키우니 원래대로 나온다.... 이문제는 Height 설정을 해주면 해결 되는데 문제는 나머지 것들이다. 자식그리드가 사라지는것을 포함해서 자식그리드에서 클릭이벤트가 발생하면 콘솔창에 애러가 발생한다. 이 콘솔창 애러는 왜그러는가 싶어 구글링 해봤더니 외국인 개발자형님들도 해결못해 안달이..
그리드 안에 중첩 그리드를 생성하는 것 까지는 성공햇는데 그 이후가 문제여서 방향을 돌렸다.. 그리드 안에 중첩된 그리드에서 발생하는 이벤트가 부모 그리드와의 이벤트와 충돌가능성이 너무나 많아서 지금의 나로서는 도저히 해결을 할 수가 없다.. 그래서 Ext 에서 중첩그리드는 지원해주지 않나보다. 지원해주지도 않는거 억지로 해보려고 구글링을 몇시간동안 해봐도 돌아오는건 피꺼솟 밖에 없다.. 그래서 지금 만들어 본 Summray 그리드. 또는 그리드 옆에 그리드 하나를 더만들어서 A그리드에서 클릭하는 데이터를 B 그리드에 바인딩 되게하는 방식들을 생각해 봤다. 두번째 방법은 내일 구현해봐야지.. 우선적으로 원하는건 그루핑 된 데이터들의 정렬 및 클릭 이벤트를 원하는 것이니 지금 해본 Summary 그리드는 ..
1 중복 탭 생성 방지 탭을 생성할 때 만약 탭의 ID가 중복될 경우 당연히 애러가 발생한다. 컴포넌트를 생성할 때 ID값을 명시적으로 작성하지 않을 경우 Ext JS에서 자동으로 중복되지 않는 ID 값을 부여하지만 만약 명시적으로 작성하였을 경우 잘못하다간 ID가 중복되버리는 경우가 발생한다. 특별한 경우가 아니라면 ID값을 중복되게 작성하지는 않겠지만 의도치 않게 이런 상황이 발생시 미연에 방지하기 위해 중복체크 후 탭 생성 코드 작성해놓음..이 코드는 트리패널에서 각각의 트리 노드를 클릭했을 때 발생하는 이벤트로 트리노드를 클릭하면 탭패널이 중앙화면에 생성되는 로직이다.
그리드를 생성하고 하나의 레코드를 클릭하면 그 안에 다른 그리드를 생성해야 할 일이 생겼다. Ext 예제 중 SubTable 플러그인을 이용하면 되는데.. 이게 하나의 "그리드"를 또하나 생성하는 것이 아니라 그 안에 을 써서 그냥 표를 표현할 뿐이었다. 모양은 비슷하나. 할 수 있는 기능이 천지차이여서 써먹을 수 있을지 모르겠는데 우선 만들어 봤으니 기록해 둬야겠다. SubTable.js 를 지금 내 수준에서는 도저히 뜯어고칠 수가 없다 ㅋㅋ.. 다른 예제를 찾아봐야 할것같기도 하다.우선 SubTable.js의 코드는 다음과 같다. 1 SubTable.js Source 플러그인을 사용할때 ptype이라는 설정을 사용하는데 alias: 'plugin.subtable'이렇게 정의를 해놓으면 ptype으로 ..
무엇보다 서버에서 세션이 종료되었을 경우 자동으로 "세션이 종료되었다" 하고 클라이언트에 알려주는게 최고이겠지만.. 그러려면 푸시 서버를 구성해야 한다.. HTML 5의 웹소켓 기술을 사용하더라도 사용자들이 모두 HTML5를 지원하는 브라우저를 사용하는것도 아니니 그냥 Ext JS의 DelayedTask를 이용해서 세션체크 기능을 구성해 보았다. 대강 흐름은 세션체크 클래스는 싱글턴으로 구성하고, 최초 어플리케이션이 로딩될 때 딱 한번 초기화한다. 싱글턴으로 구성했기 때문에 차후 세션체크 클래스를 Ext.create() 로 생성하려 하다간 애러를 뱉어내게 된다. 초기화된 세션체크 클래스는 세션을 종료하는 URL(로그아웃 URL)이 아닌 그 외의 모든 URL 호출이 있을경우 이벤트 리스닝을 통하여 실행되게..
1 Session Storage HTML5에서 제공하는 저장소중 하나. 다른하나는 Local Storage이다. 하지만 지금 필요한건 Session Storage이기때문에 Local Storage는 나중에.. 근데 사용법같은건 동일한것같다. 우선 Session Storage는 이름 처럼 각각 Session 단위로 데이터를 저장한다. 브라우저를 열때마다, 즉 하나의 윈도우가 생성 될때마다 생성된다. 이렇게 생성된 Session Storage끼리는 서로 공유도 안될 뿐더러 윈도우를 종료하는순간 모든 데이터가 지워지게 된다. 보안상 노출되어도 되는것, 잠깐 저장했다 지워야하는 것들을 저장하면 될거같다. 2 Model Source Ext JS에서 Session Storage를 사용하기 위해 모델을 만들었다. 일..
1 Sencha CMD Ext JS에서 Chart를 이용하기 위해서는 Sencha 에서 제공하는 "ext-charts" 패키지를 빌드해야한다. 이 패키지를 빌드하지않고 그냥 차트를 가져다 쓰려고하면 "차트가 어딨는지도 모르겠고 정의된것 같지도 않다"의미를 담은 애러메시지를 띄우게 된다. 다음과 같이 커맨드창에서 "ext-charts" 패키지의 경로로 이동한다. 이동 후에 다음의 명령어를 실행. sencha package build 빌드가 완료되면 자신의 앱의 Home 경로로 가서 앱 리프레시를 위해 다음의 명령어 실행. sencha app refresh Sencha CMD에서 할일은 이게 끝이다. 여기까지 하면 "ext-chart" 패키지를 사용하기 위한 사전준비는 끝났음. 2 app.json Sourc..
1 View Source 체크박스 그룹을 통하여 체크박스데이터를 표현할 뷰이다. items 속성에 체크박스에 대한 내용은 없다. 데이터를 로드하면서 생성할것이다. View(컴포넌트)의 initComponent 속성을 이용하지 않고 View가 렌더링이벤트를 일으키면 담당 View Controller가 이를 감지하고 체크박스를 생성하도록 한다. 2 View Controller Source View가 렌더링이벤트를 발생시키면 이를 감지한다. Controller를 보면 init 속성에 'menus-v'항목은 View에서 지정한 xtype이다. 즉 뷰에서 afterrender 이벤트가 발생되면 정의된 함수가 실행되게 된다. var menus = this.getViewModel().getStore('menuList..
1 Controller event listening Controller사이에서의 이벤트 리스닝은 해당 Controller가 View Controller이건 Global Controller이건 상관없다. 하나의 컨트롤러에서 fireEvent를 호출하면 다른 하나의 컨트롤러에서는 발생된 이벤트를 리스닝한다. 2 Controller 1 (Global Controller) 다른 Controller에서 발생되는 이벤트들을 전부 감지하는 Controller 정의 3 Controller 2 (View Controller) 이벤트를 발생시키는 컨트롤러 정의
1 클래스 정의 및 생성 자바스크립트는 클래스 기반의 언어는 아니다. 하지만 프로토타입 구조를 이용한 클래스 구조를 흉내 낼수가 있다. Ext JS는 이러한 작업을 쉽게 해주는 메소드들을 제공해준다. Ext Js에서 클래스를 생성하기 위해서 Ext.define 메소드를 제공해주는데 이 메소드는 문자열 기반 정의를 사용하기 때문에 네임스페이스 충돌을 피해 클래스 정의를 유연하게 할수 있게 해준다. Ext.define 메소드는 세개의 인자를 전달 받는데 첫번째 인자로 정의될 클래스의 이름을 문자열로 받게된다. 두번째는 해당 클래스의 몸체가 되는 속성 및 메소드를 오브젝트 형태로 받는다. 마지막 세번 째는 이 클래스가 정의된 후 동작하는 콜백함수를 받게 된다. 이러한 구조를 따라 클래스를 정의하면 다음과 같은..
1 어노테이션을 이용한 자동스캔 클래스패스에 위치한 클래스를 검색하여 특정한 어노테이션이 붙은 클래스를 자동으로 빈으로 등록하는 기능을 제공하고 있다. 이 기능을 사용하면 XML 설정 파일에 다양한 빈 정보를 추가하지 않고 특정한 클래스를 빈으로 등록 할 수 있게된다. 스프링 2.0부터 @Repository어노테이션, 2.5부터 Component 어노테이션, @Service 어노테이션, @Controller 어노테이션 이 추가 되었다 이들 어노테이션은 클래스 선언 부분에 붙게된다. @Commponent 어노테이션을 클래에스 적용했다면 태그를 이용하여 스프링이 클래스를 검색할 패키지를 등록하면 된다. 이 태그를 이용하면 @Component 어노테이션이 적용된 클래스 및 그 하위 어노테이션이 적용된 클래스를..
1 어노테이션 기반 설정 - 4 . @PostConstruct , @PreDestroy @PostConstruct어노테이션과 @PreDestroy어노테이션은 라이클 초기화 및 제거과정을 제공한다. @PostConstruct 어노테이션은 의존하는 객체를 설정한 이후에 초기화 작업을 수행 할 메서드에 적용되며, @PreDestroy 어노테이션은 컨테이너에게 객체를 제거하기 전에 호출 될 메서드에 적용된다. 즉, 스프링 설정 파일에서 init-method 속성과 destroy-mehtod속성을 이용하여 명시한 메서드와 동일한 시점에 실행 된다. @Resource 어노테이션과 마찬가지로 CommonAnnotationBeanPostProcessor 클래스를 빈객체로 등록하거나 태그를 사용하면 적용된다.
1 어노테이션 기반 설정 - 3 . @Resource @Resource 어노테이션은 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다. 프로퍼티 및 설정메서드(Setter, Getter)등에 적용시키며 스프링 설정파일에 등록되어있는 빈 객체의 name 속성을 통하여 자동으로 주입된다. (@Autowired 어노테이션이 타입으로 자동 주입을 하는 반면, @Resource 어노테이션은 name속성을 통해 자동 주입을 실행한다) 위의 코드는 스프링 설정파일에 등록된 "spring"이란 name을 가진 빈 객체를 spring프로퍼티에 주입하며, "springTestService"라는 name을 가진 빈 객체를 setService() 메서드의 매개변수에 주입한다. @Resource 어노테이션 역시 스프..
1 어노테이션 기반 설정 - 2 . @Autowired @Autowired 어노테이션은 의존하는 객체를 자동으로 삽입해주며 생성자, 필드, 메서드 세 곳에 적용이 가능하다. @Autowired 어노테이션은 타입을 이용한 프로퍼티 자동설정기능을 제공한다. 위의 코드는 service 프로퍼티에 SpringTestService 타입의 빈 객체를 메서드를 통해 자동으로 주입해준다. @Autowired 어노테이션을 이용하여 자동 주입 설정을 적용하려면 AutowiredAnnotationBeanPostProcessor 클래스를 빈으로 등록해주어야하며 @Required 어노테이션과 마찬가지로 설정을 추가하는것으로 대신해도 된다. @Autowired 어노테이션은 위의 코드와 같이 필드 및 생성자에도 적용시킬 수 있으며..
1 어노테이션 기반 설정 - 1 . @Required @Required 어노테이션은 필수 프로퍼티를 명시 할때 사용된다. 필수 프로퍼티를 지정하려면 먼저 프로퍼티 설정 메서드에 @Requierd 어노테이션을 붙여야한다. 위 코드에서 @Required 어노테이션을 추가해도, 스프링은 해당 프로퍼티를 필수 프로퍼티로 인식하지 않는다. 스프링 설정파일에 @Required를 인식하고 필수프로퍼티로 지정할 수 있는 클래스를 빈 객체로 등록해야 비로서 스프링이 @Required 어노테이션을 알맞게 처리할 수 있게 된다. RequiredAnnotationBeanPostProcessor 클래스는 스프링 컨테이너에 등록된 빈 객체를 조사하여 @Required 어노테이션이 적용된 프로퍼티의 값이 설정되어있는지 여부를 검사..
1 컨테이너 간 계층 BeanFactory와 ApplicationContext 컨테이너는 서로 자식-부모의 계층관계를 가질 수 있다. 컨테이너간 계층 구조를 구성하면, 자식컨테이너에서 부모컨테이너에 정의한 빈 객체에 접근할수 있다. 하지만 부모컨테이너에서는 자식 컨테이너에 정의된 빈 객체에 접근할 수 없다. JAVA에서의 상속관계와 같은 특징이 있다고 생각하면 된다. ApplicationContext나 BeanFactory 컨테이너를 생성할 때 컨테이너간의 계층관계를 구성하려면 컨테이너 생성시 부모컨테이너를 지정해 주면 된다. 위의 childContainer 컨테이너를 생성할 때 부모 컨테이너로 parentContainer를 지정하였다. 이러한 컨테이너간의 계층 관계를 설정해 주면 chlidContain..
1 외부설정 프로퍼티 외부에 프로퍼티 파일을 생성하고 스프링에서 사용할 정보를 따로 관리 할 수가 있다. 한가지 예로 자바 JDBC의 경우 DB의 종류에 따라 코딩을 다르게 해야하며, 한번 변경한 코드는 재컴파일 해야 사용을 할 수가 있게된다. 하지만 외부의 프로퍼티 파일을 생성하고 사용함으로서 프로퍼티파일의 수정을 통하여 컴파일 없이 변경된 정보를 프로젝트에 그대로 반영할 수 있는 장점이 있다 2 외부 프로퍼티파일 위의 프로퍼티 파일은 스프링에서 사용할 datasource 빈 객체의 JDBC 정보이다. 이 파일을 스프링 설정파일에서 사용하고 싶다면 스프링 설정파일에 PropertyPlaceholderConfigurer 클래스를 빈으로 등록 하고 프로퍼티 이름을 설정 파일에서 사용하면 된다. locati..
1 Bean의 라이프 사이클 스프링은 빈 을 관리하는 컨테이너이다. 따라서 빈 객체를 생성하고, 초기화및 소멸 등 일련의 과정들을 담당하게 된다. 즉 스프링 컨테이너에 저장되는 빈 객체는 생성, 초기화, 소멸의 라이프 사이클을 가지게 된다. 스프링컨테이너에 생성되는 빈 객체의 라이프 사이클은 빈 클래스가 구현한 인터페이스에 따라 달라진다. 우선 BeanFactory 컨테이너를 사용할 경우 빈 객체의 라이프 사이클은 이러한 과정을 거치게 된다. 2 BeanFactory 사용 빈 객체 생성BeanNameAware.setBeanName()BeanFactoryAware.setBeanFactory()BeanPostProcessor의 초기화 전처리커스텀 init - methodInitializingBean.afte..
1 부모 빈을 사용한 설정의 재사용 여러개의 빈을 설정 및 추가하다 보면 설정 정보및 내용이 중복되는 경우가 존재한다. 중복되는 설정을 갖는 빈이 다수 존재할 경우, 중복되는 설정정보를 담고있는 부모 빈을 생성하여 부모 빈의 정보를 재사용 할수 있도록 설정 할 수 있다. 여러개의 빈을 설정 및 추가하다 보면 설정 정보및 내용이 중복되는 경우가 존재한다. 중복되는 설정을 갖는 빈이 다수 존재할 경우, 중복되는 설정정보를 담고있는 부모 빈을 생성하여 부모 빈의 정보를 재사용 할수 있도록 설정 할 수 있다. 위의 설정에서 "commonDao" 빈 객체는 밑에 설정된 빈들의 중복된 설정을 정의하고 있다. 또한 abstract 속성을 "true"로 설정하였는데 이는 빈으로 객체를 생성하지 않겠다는 의미이다. 즉 ..
1 의존관계 자동설정 스프링은 의존하는 빈 객체의 타입이나 이름을 이용하여 의존 객체를 자동으로 설정 할 수 있는 기능을 제공한다. 자동설정에는 다음 네 가지의 방식이 존재한다. 2 의존관계의 네 가지 방식 byName : 프로퍼티의 이름과 같은 이름을 갖는 빈 객체를 설정byType : 프로퍼티의 타입과 같은 타입을 갖는 빈객체를 설정constructor : 생성자 파라미터 타입과 같은 타입을 갖는 빈객체를 생성자에 전달autodetect : constructor 방식을 먼저 적용하고, byType 방식을 적용하여 의존 객체를 설정 위 방식중의 한가지를 이용하여 의존객체를 설정하려면 태그에 autowire 속성의 값을 지정해 주면 된다. 또한, 설정파일에포함된 모든 빈객체에 대해 특정 방식의 자동설정을..
1 콜렉션타입 프로퍼티 설정 - 2 . Map Map타입의 프로퍼티를 설정하는 경우에는 태그를 사용한다. 위 SpringTest 클래스는 Map타입의 items 프로퍼티를 가지고 있다. 이때 items에 Map타입의 값을 전달하려면 태그를 사용한다. 태그는 Map에 저장될 key와 value를 나타낸다. 이때 태그 사이에 위치할수 있는 태그는 ,,,,, 등 태그가 위치 할 수 있으며 값태그에도 태그와 동일한 태그들이 위치할 수 있다. 예를 들어 키와 값의 타입이 모두 String 이라면 키태그와 값태그 모두 태그를 사용하여 값을 전 달 할 수 있게된다. 만약 다른 데이터 타입이라면 태그의 경우와 같이 각각의 태그에 데이터타입을 명시해주면 된다. 또한 위의 태그를 보면 내용에 비해 코드의 분량이 상당히 많..
1 콜렉션타입 프로퍼티 설정 - 1 . List & Array 빈으로 설정한 클래스의 프로퍼티 타입이 List 이거나 Map과 같은 콜렉션 타입인 경우, 스프링에서는 각 타입에 맞는 태그를 이용하여 값을 설정 할 수 있도록 하고 있다.첫번째로 List 및 배열에 관한 설정 방법이다. List나 배열타입의 프로퍼티에 값을 전달하기 위해서는 태그를 사용하면 된다. 위의 SpringTest 클래스는 List 타입의 프로퍼티를 가지고 있다. 이경우, 태그를 이용하여 List에 저장될 객체를 설정 할 수 있다. 태그를 이용하여 List에 저장될 객체를 설정한다. 태그를 이용하여 빈으로 설정된 객체를 전달 할 수 있으며, 태그를 이용하여 빈으로 설정되지 않은 임의의 객체를 전 달 할 수도 있다. 만약 List에 저..
1 Bean 생성 및 의존관계 설정 - 2. 프로퍼티 프로퍼티 설정 방식은 setter형태의 설정 메서드를 사용해서 필요한 객체와 값을 전달 받는다. 생성자 설정방식에서의 SpringTest클래스가 생성자로 객체를 주입받던 방식이 아닌 setter메서드를 통해 객체를 전달받는 방식이다. 즉 위의 코드에서 setDao()메서드는 dao 프로퍼티의 값을 설정하게 된다. 스프링에서는 태그를 이용하여 프로퍼티에 값을 설정한다. 태그에서 태그를 통해 빈객체를 전달했듯이 태그 역시 태그로 빈 객체를 프로퍼티값으로 전달 할 수 있다. 기본타입 마찬가지로 태그 대신 태그를 사용하면 되며, 태그도 각각 ref속성과 value 속성으로 프로퍼티 값을 전달 할 수 있다.
1 Bean 생성 및 생성자를 통한 의존관계 설정 스프링은 객체를 담고있는 컨테이너이다. 컨테이너에 저장 될 빈객체와 각 빈객체들간의 의존관계를 XML 파일을 통하여 설정하게 된다. 2 Bean 생성 및 컨테이너를 통한 Bean 사용 스프링 컨테이너가 관리할 빈객체를 생성하기 위해서는 태그를 사용하면 된다. 태그의 class 속성은 생성할 빈 객체의 패키지를 포함한 클래스 이름이며, id속성은 스프링 컨테이너에서 생성된 객체를 구분하는데 사용되는 식별값으로 사용된다. id속성을 name속성으로 바꿔서 사용해도 된다. id속성은 XML의 구성요소 이기 때문에 id속성을 사용할 경우 동일한 id값을 가지는 태그를 설정하면 애러가 발생하며, id속성은 특수분자를 포함할 수 없는 반면에 name 속성은 특수문자..
1 File클래스 하드드라이브에 저장된 파일을 핸들할 수 있게 하는 클래스하드 드라이브의 파일을 다이렉트로 접근하는 방식이 아닌 해당 파일을 메모리에 올려서 접근하게되고 해당 파일에 대한 읽기/쓰기 기능은 적용이 되지 않고 기본적인 핸들링만이 가능하다(파일의 이름 변경/복사/삭제 등등) 2 File클래스의 주요 메서드 이름 설명 isFile() 해당 파일이 파일이면 true 파일이 아니면 false 반환 isDirectory() 해당 파일이 디렉토리(폴더)이면 true 아니면 false isHidden() 해당 파일이 숨김파일이면 true 아니면 false lastModified() 해당 파일의 마지막 수정날짜 반환 canRead() 해당 파일이 읽기속성을 가진 파일이면 true 아니면 false can..
1 getHeader()를 이용한 브라우저 검증 웹 프로젝트를 진행할 때 각가의 브라우저마다 지원하는 내용이 다르기 때문에 꼭! 브라우저를 확인해야한다. 요청 브라우저의 정보는 Header에 각각 저장이되며, 이러한 정보는 HttpServletRequest 객체제 저장되어 전송되게 된다. HttpServletRequest 객체가 제공하는 getHeader()메소드를 이용하여 요청단의 OS, 및 브라우저를 확인하는 간단한 예제이다. 2 Header에 담기는 정보들 hostconnectionacceptuser-agent(OS 및 브라우저의 정보)referer(요청 URL)accept-encodingaccept-languagecookie 3 Jsp source 4 Java source 한가지 중요한정보는 브라..
- Total
- Today
- Yesterday
- Spring
- 시간차이구하기
- extjs grid crud
- tiles sitemesh
- 마이바티스 공통 resultmap
- maven 로컬저장소
- 스프링
- extjs 6 테마
- with grant option
- 스프링 컨테이너
- extjs6
- with admin option
- sencha touch icons
- mysql 한글깨짐
- spring autowired
- 마이바티스 resultmp
- local repository
- 스프링 autowired
- mybatis resultmap
- jboss spring4
- mysql convert
- 로컬저장소
- extjs
- extjs 6 theme
- custom mapping
- sencha touch icons list
- mybatis common resultmap
- spring container
- tiles vs sitemesh
- 제이보스 스프링4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |