팝업은 팬시박스를 사용했습니다. 이게 저번에 선택했던 컬러 머시기 보다 더 깔끔하더군요.
http://fancybox.net/home
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);
이렇게 될텐데 말이죠. 흠.. 뭐좀 먹고 와서 해봐야지.