Whiteship's Note

'enum 검색'에 해당되는 글 1건

  1. 2010.06.09 [회사일] 검색에 enum 필드 추가하기

[회사일] 검색에 enum 필드 추가하기

프로젝트/SLT : 2010.06.09 11:47


검색 파라미터에 추가해주고 화면에 추가하고 DAO에서 검색부분 코드만 조금 바꾸면 될 것 같습니다.

코드 검색 파라미터를 하나의 클래스로 정의해놨기에 망정이지 이걸 개별적으로 다 핸들러 파라미터로 받아서 처리하면;;; @_@;; 컨트롤러 코드도 손대야 했을껍니다. 아마 서비스 코드도 마찬가지구요.

public class CodeSearchParam {

    private int cateValue;

    private String name;

    private String code;

...
}

이렇게 CodeCate의 값을 바로 가져옵니다. 스프링 바인딩 사용해서 CodeCate 타입으로 받아도 되지만 굳이 그럴필요가 없더군요. 어차피 DB에 들어있는 값과 비교하려면 CodeCate의 value가 필요하며 화면에서도 이걸 전달해 주는데 굳이 이걸 또 포매터 사용해서 CodeCate로 바꿔서 거기서 .getValue()로 꺼내서 비교할 필요가 있나 싶더라구요. 그래서 그냥 int 타입인 cateValue를 선언했습니다.

이제 화면코드로 넘어갑니다.

                <p class="ui-widget-content"><label>코드종류: </label>
                    <form:select path="cateValue">
                        <form:option value="0" label="ALL"/>
                        <form:options items="${ref.codeCateList}" itemLabel="descr" itemValue="value"/>
                    </form:select>
                </p>

아무것도 선택하지 않았을 때 기본으로 ALL이 보일테고 그걸 선택하면 0이라는 값이 넘어가게 합니다. 뭐 이부분은 맘대로인것 같은데 그닦 맘에 들진 않아도 뭐 어쩔 수 있나요. 모든 enum마다 ALL 이라는 값을 만들기도 뭐하고.. 걍 이대로가 나은것 같습니다.

DAO에서 검색 파라메터를 적용하는 부분에 코드를 추가합니다.

    private void applySearchParam(Criteria c, CodeSearchParam searchParam) {
        CriteriaUtils.addOptionalLike(c, "code", searchParam.getCode());
        CriteriaUtils.addOptionalLike(c, "name", searchParam.getName());
        CriteriaUtils.addOptionalEqual(c, "cate", searchParam.getCateValue());
    }

CriteriaUtils에 메서드를 하나 추가해 줍니다.

    public static void addOptionalEqual(Criteria c, String fieldName, Integer value) {
        if(value != null && value != 0){
            c.add(Restrictions.eq(fieldName, value));
        }
    }

끝. 오예 잘 됩니다.

컨트롤러나 서비스 코드는 한줄도 건드리지 않았답니다. 
한번 만들어 논 뒤로는 거의 본적이 없으니 어떻게 생겼는지도 기억나지 않는군요.


top