*현재 Tapestry관련 3 party Library
: Tapestry–JQuery, Tapestry–Bootstrap, Tapestry-breadcrumb, Tapestry – Stitch v0.0.1
1) Grid 컴포넌트 작업시작.
- JQgrid를 CustomComponent화 하고있음.
- URL을 통해서 JSON Data를 받아오는 부분에서, Serialization 처리가 이슈인데 (List<Object>/List<Map> –> JSONArray)
이 부분은 JSON-lib에서 Serializer를 제공해줘서 쉽게 구현함.
- 다만, Tapestry에서 JSON을 제공하는데(org.apache.tapestry5.json.*) 이게 JSON-lib보다 제공되는 API가 적어
JSON-lib를 같이 사용하다보면, 안되는게 있음. => 이부분도 JSONWrapper를 만들어 유동적으로 처리.
2) Tapestry Page Life Cycle
- Tapestry Page Life Cycle 확인해봐야할듯
- @SetupRender -> @BeginRender -> @BeginRenderBody -> @AfterRenderBody -> @AfterRender
- body가 없을 경우, @*Body이벤트는 안돔.
3) 이벤트 버블링 처리 - 한페이지에서 여러개의 JQGrid가 있을 경우, 이벤트처리…
- 한페이지에 여러개의 jqgrid가 있을 경우, 현재 @Event (“data")하나로 받기때문에
- 한페이지에 여러개 있을 경우, 한메소드만 계속실행될텐데, 이를 Event버블링 사용해서 메소드명 넘기고
- Component에서 @Event(“data”)에서 라우팅 해주면 될듯.
*이슈가 있는데, 오랜시간 놔두면, Component에 있는 target(List)가 reset되는 듯함. (다시 확인해봐야함).
*Component 인스턴스만 초기화되는 거라면, Paging처리로직을 Page구현 객체에서 해야할 가능성도 있음.
*오랫동안 나뒀다가, 다시 정렬하니, 컴포넌트의 target(List)가 Null로 나와 에러가 발생한다.
Page에서 Persist설정을 했음에도.. 다시 한번 봐야할듯.
=> 왜냐하면 Persist가 Session에 저장하는 방식이기 때문, 따라서, JS에서 Ajax통식하니, 세션에 있던 list는 사라지고
Nullpointer가 나는거임. list를 Null체크해서 다시 가져오게하는 코드가 필요함.
- [Event버블링 - 구현방법]
ComponentResources.trrigerEvent( 페이지에서 구현할 eventName, 파라미터, 콜백함수(ComponentEventCallback));
페이지에서 구현한 이벤트 함수가 실행되고 그 결과를 콜백함수가 받음.
컴포넌트 콜백함수에서 Result받은 JSON을 return하니까 잘된다..굿
4) [페이징처리] ArrayList 자르기 – subList, or Ibatis처럼 다시 Query실행해서 List받아오면 됨.
5) 컴포넌트로 Parameter로 넘길때, t:를 사용해야 type을 제대로 인식해 넘어간다. (ex List로 넘겼는데 String으로 받는다거나)
ex <t:jqgrid t:list=”sources” />
6) [정렬처리] SIDX, SORD 값의 여부에 따라 처리.
Collection.sort와 NaturalOrderComparator(미리 만들어둔것) 사용하니 잘된다..ㅎ
******************************************************************************************
나 바보임.. 가장 중요한 colModel매핑과 colName를 처리 안함..
- 사용자에게 colNames를 입력받음. index와 name, width(100)는 default로 매핑시켜주고
- Options : widths, labels, aligns, sortables –> JSON(colName : value) 형태로..
*colNames가 Labels임.
*colModel의 name과 JSON의 Key값이 일치해야함.
******************************************************************************************
8) [다양한 타입 지원] 데이터 타입 String, int, Date, Enum… 등등
- String, integer, long, double은 별다른 설정 없이 잘 됨.
- Date형식은 JSON으로 변환하니 Object로 인식, 추가 R&D 요망.
- 이부분은 Java Date형식과 JS Date형식이 달라, 구현 힘들 듯하고 JavaBean에서 별도로 항목을 둬야할듯(ex wdateStr)
9) 앞으로 추가기능.
옵션기능 – rownumbers(true/false)
응용기능
- Inline Editor
- Check Grid …
*Form전송시 Data처리나, Java연동을 어떻게 처리할지 알아봐야함. 이건 중요.
고급기능
- Virtual Scrolling (rowTotal, scroll:1)
- Grouping / Group Header
- Frozen Column : colModel에 항목에 frozen:true , jQuery(“#jqgrid”).jqGrid(“setFrozencolumns”);
- SubGrid
- Tree Grid
- search(single/multiple)
- Multi Sort
- Page toolbar Options
- Format
*대용량의 경우 Virtual Scrolling과 VirtualScrolling+Paging처리 하면 무리없이 가능할듯.
'Workspace > Web Dev' 카테고리의 다른 글
[Tapestry] JQGrid 커스텀 컴포넌트 개발일지(3). (1) | 2013.12.03 |
---|---|
[Tapestry] JQGrid 커스텀 컴포넌트 개발일지(2). (0) | 2013.11.29 |
[Tapestry 5.4] Custom 컴포넌트 개발방법. (0) | 2013.11.19 |
[Tapestry 5.4] 5.4 Alpha버전으로 업그레이드 방법. (0) | 2013.11.19 |
[Tapestry5.4] R&D 정리. (0) | 2013.11.13 |