Whiteship's Note

[회사일] 그리드 정렬 기능 구현하기

프로젝트/SLT : 2010. 6. 3. 11:47


이제 실제 회사일과 싱크 맞는다. 휴.. 이전까지 싱크 맞출려고 급하게 달렸더니 정신 없다.ㅋ

그리드를 누르면 JqGrid가 알아서 매개변수에 정렬할 필드 명과 정렬 방향을 넘겨준다. 그럼 컨트롤러에서 잘 받는지 확인부터 해볼까.

    @RequestMapping
    public void list(Model model, CodeSearchParam searchParam, PageParam pageParam) {
        System.out.println("sidx: " + pageParam.getSidx());
        System.out.println("sord: " + pageParam.getSord());

        model.addAttribute("codeList", codeService.list(pageParam, searchParam));
    }

잠깐 저렇게 추가해서 콘솔에 찍고나서 다시 지운다. 이럴때는 JRebel이 빛을 발한다. 짱이다. 서버 껐다켜지 않아도 이정도는 간단하게 잘 처리해준다.

서비스 코드 고칠것 없다. 이미 PageParam에 들어있으니.. 그냥 타고 갈것다.
DAO 인터페이스도 고칠것 없다. DAO 구현체의 list만 고치면 될 것 같다.

    public List<Code> list(PageParam pageParam, CodeSearchParam searchParam) {
        Criteria c = getCriteriaOf(Code.class);
        //searching
        applySearchParam(c, searchParam);
        //paging
        c.setFirstResult(pageParam.getFirstRowNumber());
        c.setMaxResults(pageParam.getRows());
        //ordering
        if(pageParam.getSord().equals("asc"))
            c.addOrder(Order.asc(pageParam.getSidx()));
        else
            c.addOrder(Order.desc(pageParam.getSidx()));
        
        return c.list();
    }

고쳤다. 이전에 만들었던 테스트를 돌렸다. 혹시 이 코드를 수정하면서 이전에 되던게 안될까바 걱정되서 돌려봤다. 이런 테스트를 리그레션 테스트 또는 회기 테스트라는 어려운 말을 쓰기도 하는데 뭐.. 많이 아는척하는 사람들과의 대화에서 밀리지 않으려면 알아두는게 좋겠다.

자 그럼 이제 다시 지금 추가한 코드에 대한 테스트를 만들어보자.

    @Test
    public void testListOrdering() throws Exception {
        insertXmlData("testData2.xml");

        CodeSearchParam codeSearchParam = new CodeSearchParam();
        PageParam pageParam = new PageParam();
        pageParam.setRows(5);
        pageParam.setPage(1);
        pageParam.setSidx("id");  // id 필드 기준으로
        pageParam.setSord("asc"); // 내림차순

        List<Code> codeList = codeDao.list(pageParam, codeSearchParam);
        String result = "";
        for(Code code : codeList){
            result += code.getId();
        }
        assertThat(result, is("12345"));

        pageParam.setSidx("id");  // id 필드 기준으로
        pageParam.setSord("desc"); // 내림차순

        codeList = codeDao.list(pageParam, codeSearchParam);
        result = "";
        for(Code code : codeList){
            result += code.getId();
        }
        assertThat(result, is("76543"));
    }

오퀘 잘 돈다. 캬캬 사실 맨 마지막 줄은 예상을 잘못해서 "54321"로 적었었는데.. 테스트 코드가 니보다 똑똑했다. @_@;;; 아... 이런!..

테스트보다 멍청한.. 개발자.. 이게 나다. ㅠ.ㅠ

흠.. 슬슬 그리드 쪽이 정리가 되가니깐 추가/수정 기능쪽으로 넘어갈까 말까.. 
아니면 기본 정렬 기능을 넣을까..고민 된다.

사실 대표님은 가끔 "일단 CodeCate로 정렬하고 그 다음에 코드값으로 정렬해줘" 이렇게 다중 정렬을 요구한적이 있었다.

밥먹으면서 생각해봐야지.. 그전까진 잠깐 놀까나..
top

Write a comment.




: 1 : ··· : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : ··· : 30 :