[회사일] 다대다 관계 서브 그리드 CRUD 완성
팝업은 팬시박스를 사용했습니다. 이게 저번에 선택했던 컬러 머시기 보다 더 깔끔하더군요.
jqGrid 다중 선택 기능을 사용했는데 아주 깔끔합니다. 그리드도 잘 선택한것 같아요.
URL은 RESTful 하게 만든다고 만들어 봤는데..
@RequestMapping(value="/{id}/rights", method = RequestMethod.GET)
public void rights(@PathVariable Integer id, Model model, PageParam pageParam){
model.addAttribute("list", service.rightListOfMember(id, pageParam));
}
@RequestMapping(value="/{id}/rights", method = RequestMethod.POST)
public @ResponseBody String addRights(@PathVariable("id") Integer id, @RequestParam("ids[]") Integer[] ids){
service.addRightsToMember(id, ids);
return "success";
}
@RequestMapping(value="/{id}/rights", method = RequestMethod.DELETE)
public @ResponseBody String deleteRights(@PathVariable("id") Integer id, @RequestParam("ids[]") Integer[] ids){
service.deleteRightsFromMember(id, ids);
return "success";
}
잘 동작합니다. 히든 필드 이용해서 _method에 원하는 RequestMethod 실어서 보내주면 되니깐 아주 간단하네요. HTML5 부터는 이런일 안해도 될려나.. 근데 HTML5 지원하는 브라우저가 있어도 그걸 써야 말이죠;;
지금 상태에서 한가지 굉장히 맘이 불편한 코드가 있는데.. 바로 서비스 코드입니다.
List<Right> rightListOfMember(Integer memberId, PageParam pageParam);
void addRightsToMember(Integer memberId, Integer[] rightsIds);
void deleteRightsFromMember(Integer memberId, Integer[] rightsIds);
별로 객체지향적으로 보이지 않아요.. Request Parameter Oriented 프로그래밍 같지 않나요.@PathVariable로 넘어오는 값에도 분명히 바인딩이 적용될텐데... 컨트롤러에서부터 Member 타입으로 바인딩해서 가져오면 저런 코드가..
List<Right> rightListOfMember(Member member, PageParam pageParam);
void addRightsToMember(Member member, Right[] rights);
void deleteRightsFromMember(Member member, Right[] rights);
이렇게 될텐데 말이죠. 흠.. 뭐좀 먹고 와서 해봐야지.