*현재 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 카테고리의 포스트를 톺아봅니다