아래 발생한 문제는 SimpleFormController와는 전혀 관계가 없는 내용일 수도 있다는 것을 미리 알려드리고 시작해야겠습니다. 이유는 결론을 보시면 알게 되실듯.

사용자 삽입 이미지위와 같은 리스트가 있습니다. 오호 분명히 "기선"이라는 사람이 매우 많이 있습니다. 왼쪽에 있는 search로 이동해서 "기선"을 찾아 봅시다.

사용자 삽입 이미지이렇게 기선을 입력하고 enter 또는 search 버튼을 클릭했더니 다음과 같은 화면이 출력 됐습니다.

사용자 삽입 이미지헐...출력할 것이 없다니.. 도대체 어디서 문제가 생긴거야???

1. 소스코드를 점검하기 시작합니다. JSP와 Controller를 점검하기 시작했습니다.
[#M_ more.. | less.. |

 컨트롤러

public class SearchMemberController extends SimpleFormController {

    private MemberRepository memberRepository;

    public SearchMemberController() {
        setCommandName("memberCommand");
        setCommandClass(MemberCommand.class);
        setFormView("search"); // 생략가능.
        setSuccessView("searchResult");
    }

    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Override
    protected ModelAndView onSubmit(Object command) throws Exception {
        MemberCommand searchingMember = (MemberCommand) command;
//        System.out.println("message 출력: " + search.getName());
        ModelAndView mav = new ModelAndView(getSuccessView())
            .addObject("resultMember", memberRepository.findByName(searchingMember.getName()))
            .addObject("memberCommand", searchingMember);
        return mav;
    }
}

search.jsp

<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:display="urn:jsptld:http://displaytag.sf.net"
    xmlns:form="http://www.springframework.org/tags/form">
    <jsp:directive.page contentType="text/html; charset=UTF-8" />
    <jsp:include page="inc/header.jsp" flush="true" />

    <html>
    <head>
    <title>Search For Members</title>
    </head>
    <body>
    <h2>Search For Members</h2>
    <form:form commandName="memberCommand" method="post">
        <table>
            <tr>
                <td>Name:</td>
                <td><form:input path="name" /></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="Search" /></td>
            </tr>
        </table>
    </form:form>
    </body>
    </html>

    <jsp:include page="inc/footer.jsp" flush="true" />

</jsp:root>

searchResult.jsp

<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:display="urn:jsptld:http://displaytag.sf.net"
    xmlns:c="http://java.sun.com/jstl/core_rt">
    <jsp:directive.page contentType="text/html; charset=UTF-8" />
    <jsp:include page="inc/header.jsp" flush="true" />

    <jsp:scriptlet>
        java.util.List members = (java.util.List)request.getAttribute("resultMember");
        request.setAttribute("test", members);
    </jsp:scriptlet>

    <h2>Search Results</h2>

    <display:table name="test" export="true">
        <display:column property="name" title="이름"/>
        <display:column property="email" autolink="true"/>
        <display:column property="phone" title="연락처"/>
        <display:column property="blogAddress" title="Blog" autolink="true"/>
        <display:column property="messengerId" title="MSN"/>
    </display:table>

    <jsp:include page="inc/footer.jsp" flush="true" />

</jsp:root>

_M#]
처음에는 command 객체에 값이 들어가지 않는 것 같다는 생각이 들었습니다. 중간에 출력문을 한번 넣어보면 될 것을[footnote]소스코드에 주석처리 된 부분입니다.[/footnote] 아직까지도 SimpleFormController가 어떻게 동작하는 것인지 제대로 모르기 때문에 그 떈 더욱 더 Command 객체에 값이 언제 들어가는 것인지 알 수가 없었습니다.

그리고 두번째는 지난 글에서 의문이 들었던 command 객체를 도메인 객체로 써야 하는건가? 싶어서 Member로 바꿔서도 해봤습니다. 결과는... 여전했습니다.

2. 조금더 공부하다가 Command 객체에 값이 들어갔는지 확인해봤습니다. 세상에 값이 들어가 있었습니다. 값이 들어가 있긴 한데... 한글이 깨져있더군요.

message 출력: ?¸°???

-_-;; 난감했습니다. 이전에 DB 인코딩 문제로 한참을 해맸었는데 또다시 인코딩문제인가.. ㄷㄷㄷ 거리고 있었는데 다행히 한수형이 알려주셔서 web.xml에 다음과 같이 코드를 넣어줬더니 한글이 제대로 보였습니다.
[#M_ more.. | less.. |     <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>_M#]
3. 좋았습니다. 이제 콘솔에 찍어보니 한글도 제대로 보이고 검색을 날렸는데... 여전히!! 못찾는겁니다. 왜?? 도대체 왜!! 못찾는거야.. 하면서 iBATIS에 SQL을 확인하러 갔습니다... 세상에...ㅠ.ㅠ
[#M_ more.. | less.. |     <!-- find -->
    <select id="find" resultMap="memberMap">
        SELECT id, name, messengerId, email, blogAddress, phone
        FROM Member
        WHERE
        <isNotNull property="phone">phone = #phone#</isNotNull>
        <isNotNull property="blogAddress">blogAddress = #blogAddress#</isNotNull>
        <isNotNull property="email">email = #email#</isNotNull>
        <isNotNull property="messengerId">messengerId = #messengerId#</isNotNull>
        <isNotNull property="name">name = #name#</isNotNull>
    </select>_M#]like로 바꿔야 겠어요. 흐흐흐흐흐흐흐