멋진 사람이군요.

성함이 진지한이신데.. 가명이겠죠?..부모님이 “소설을 쓰고있다!”라는 말 때문에 직접 소설을 써보고 자신의 소설에 굉장히 자신감이 있는 모습.. 멋지네요. 자기 자신의 평가는 자기 자신이 하는거라는 생각이 듭니다. 주변에서 자신의 노래를 “너희 노랜 너무 우울해. 토할것 같에”라고 말을 하더라도 5년이나 밴드를 유지해 나갈 수 있는건 자기 자신에 대한 믿음이 없었다면 불가능했겠죠.

노래를 들어봅시다.

역시 우울하군요…

Validator 사용하기

앞에서 만든 검색창을 사용할 때 빈 값을 넣으면 에러 메시지가 오른쪽에 출력하도록 하고 싶어졌습니다.

사용자 삽입 이미지
저렇게 해주고 싶으면 먼저 Validator가 필요하고…Controller에 Validator를 등록해줘야 하고…View에서 에러 출력할 부분을 표시해 줘야 합니다.

1. Validator 구현하기

public class SearchingValidator implements Validator {

    @SuppressWarnings(“unchecked”)
    public boolean supports(Class clazz) {
        return MemberCommand.class.isAssignableFrom(clazz);
    }

    public void validate(Object obj, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, “keyword”, “required”, “Field is required.”);
    }
}

위 코드는 Spring Reference 13.9.12에 있는 error tag 부분에 있는 소스를 거의 그대로 사용했습니다. 여기에 있는 코드를 보기 전에는 Pro Spring을 보고 아래처럼 구현했었습니다. 전 위가 더 간단해 보이고 편했습니다.
[#M_ more.. | less.. | public class SearchingValidator implements Validator {
    public boolean supports(Class clazz) {
        return clazz.isAssignableFrom(MemberCommand.class);
    }

    public void validate(Object obj, Errors errors) {
        MemberCommand command = (MemberCommand) obj;
        if (command.getKeyword() == null || command.getKeyword().length() == 0) {
            errors.rejectValue(“keyword”, “required”, “Field is required.”);
        }
    }
}_M#]2. Controller에 등록하기.

    <bean name=”/search.do”
        class=”member.web.SearchMemberController”>
        <property name=”memberRepository” ref=”memberRepository” />
        <property name=”validator” ref=”searchingValidator” />
    </bean>

    <!– Validator 등록 –>
    <bean name=”searchingValidator” class=”validator.SearchingValidator”/>

3. View에 자리잡기.

        <table>
            <tr>
                <td>SEARCH:</td>
                <td><form:input path=”keyword” /></td>
                <td><form:errors path=”keyword” /></td>
                <td><input type=”submit” value=”GO” /></td>
            </tr>
        </table>

4. 실험해 봤습니다.
사용자 삽입 이미지
수고했삼~

검색창 하나로 모든 필드에서 검색하기.

검색을 할 때 하나의 창에 입력한 값이 멤버와 관련된 어떠한 필드에 포함되더라도 검색을 하도록 구현했습니다. 입력한 값으로 모든 필드를 뒤져보면 되겠죠. 몇일 전 찬욱이가 모든 필드를 나타내는 키워드는 없는지 궁금해 했었는데 궁금해 하는 이유를 물어보다가 이런 기능을 구현할 때 있으면 편하겠구나 하는 생각이 들었는데 찾아보질 않았네요.

애니웨이… 실험해 봤습니다.
사용자 삽입 이미지결과
사용자 삽입 이미지이번에는 blog 주소로 검색을 해봤습니다.
사용자 삽입 이미지결과
사용자 삽입 이미지
흠… 잘 되는 군요.

Good Job! 이제 검색 메뉴를 없애고 검색을 리스트 화면에 합쳐 놓고 리스트 부분만 갱신 되도록 바꿔봐야겠습니다. 검색할려고 다른 곳으로 이동한다는 것이[footnote]눈으로 메뉴를 찾고 클릭을 해야 하고 입력할 곳을 눈으로 찾고 다시 엔터나 클릭을 해야 한다는 번거로움[/footnote]귀찮기 때문이죠.

Custom Tag 만들기

참조 : http://www.javastudy.co.kr/docs/lec_javaweb/jsp/chapter5.pdf

1. Tag Handler Class 만들기(TagSupport or BodyTagSupport 상속)
2. Tag Library Descriptor File 만들기(Tag 이름과 Tag를 정의한 클래스 등을 명시합니다.)
3. JSP에서 사용하기.(taglib 지시자에 url과 prefix 명시하기)

위 참조 문서에 나와있는 예제의 순서입니다.
1. Body와 속성이 없는 Tag
2. 속성이 있는 Tag
3. body가 있는 Tag
4. Optional Tag
5. Body 부분 조작하는 Tag
6. Body 부분 반복하는 Tag
7. 중첩 연관 Tag

개인적으로 1, 2, 3, 4 번 까지는 그런데로 이해가 되는 것 같은데 그 뒤로는 머리가 복잡해 지다가 7번에서 gg…