[회사일] 그리드 정렬 기능 구현하기
이제 실제 회사일과 싱크 맞는다. 휴.. 이전까지 싱크 맞출려고 급하게 달렸더니 정신 없다.ㅋ
그리드를 누르면 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로 정렬하고 그 다음에 코드값으로 정렬해줘" 이렇게 다중 정렬을 요구한적이 있었다.
밥먹으면서 생각해봐야지.. 그전까진 잠깐 놀까나..