Spring’s form tag

참조 : http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html#mvc-formtaglib

JSP 맨 위에

<%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form” %>

이렇게 올려놓고…

<form:form commandName=”searchMember”>
    <table>
        <tr>
            <td>Name:</td>
            <td><form:input path=”name” /></td>
        </tr>
     </table>
</form:form>

요론식으로 쓰면 된다길래 해봤는데…다음과 같은 에러 메시지 나옵니다.

org.apache.jasper.JasperException: /search.jsp(3,5) Invalid standard action

맨위에 올려놓은 <%@ taglib ..%> 이 부분을 없애면 페이지를 읽긴하는데 저게 없으니까 Spring form tag를 쓸 수가 없고(이걸 써보려고 한건데 못쓰게 되면 안되는뎅;) 저걸 붙이면 에러가 나오고.. 흠.. 왜이러나.. ㅠ.ㅠ

아래는 search.jsp 코드 전부 입니다.
[#M_ more.. | less.. | <%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form”%>

<jsp:root version=”1.2″ xmlns:jsp=”http://java.sun.com/JSP/Page”
    xmlns:display=”urn:jsptld:http://displaytag.sf.net”>
    <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=”searchMember”>
        <table>
            <tr>
                <td>Name:</td>
                <td><form:input path=”name” /></td>
            </tr>
        </table>
    </form:form>
    </body>
    </html>

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

</jsp:root>
_M#]
헉.. 포스팅 하자마자 문제 해결…

jsp 1.2  문법을 보니깐 xml에서는 taglib을 <jsp:root xmlns:이름=”uri” >이렇게 지정해 주고 쓰는 거군요.

위에 있는 코드 윗 부분을 아래 처럼 수정을 하면 제대로 tag가 먹힙니다. 나이스!!  🙂

<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“>

DisplayTag과 SpringMVC

SpringMVC의 컨트롤러에서 원하는 페이지 이름(여기서는 index)으로 memberList 객체를 memberList라는 이름으로 전해 줬습니다.
[#M_ more.. | less.. |     protected ModelAndView handleRequestInternal(HttpServletRequest request,
           HttpServletResponse response) throws Exception {

       List<Member> memberList = memberRepository.getAllMembers();
       return new ModelAndView(“index”, “memberList”, memberList);
   }_M#]그리고 .jsp로 가도록 View Reslover를 등록 해뒀기 때문에 index -> index.jsp에 membeList객체를 들고 찾아갑니다. 그래서 index.jsp에서는 다음 처럼 dispalyTag에 바로 이 memberList 라는 이름을 사용했더니 어젯밤에 잠들기 전에 본것과 같은 화면이 출력됐습니다.
[#M_ more.. | less.. |     <display:table name=”memberList” pagesize=”5″ export=”true”>
        <display:column property=”name” title=”이름” sortable=”true” />
        <display:column property=”email” autolink=”true” sortable=”true”/>
        <display:column property=”phone” title=”연락처” sortable=”true”/>
        <display:column property=”blogAddress” title=”Blog” autolink=”true” sortable=”true”/>
        <display:column property=”messengerId” title=”MSN” sortable=”true”/>
    </display:table>_M#]위 코드는 컬럼명을 원하는 이름으로 주고(title), 페이징을 하고(pagesize), 컬럼별로 정렬이 가능하도록(sortable) 했습니다. 아. 그리고 exel, pdf, cvs(?), rtf(?) 형식의 파일로 데이타를 추출해 낼 수 있도록 했습니다.(export=true)
사용자 삽입 이미지이런 화면이 보입니다. 원하는 대로 된 것 같지만… 페이지 번호를 눌러보고 메뉴별로 눌러서 정렬을 해보려고 하면 다음과 같은 에러를 만나게 됩니다.
사용자 삽입 이미지=> page 번호 클릭 했을 때 발생하는 에러

사용자 삽입 이미지=> 컬럼이름을 눌러서 정렬하고 싶었는데 발생한 현상

다음과 같이 수정을 하면 원하는 대로 동작합니다.
[#M_ more.. | less.. |
    <jsp:scriptlet>
        Object foo = session.getAttribute( “members” );
        if( foo == null ) {
            java.util.List memberList = (java.util.ArrayList)request.getAttribute(“memberList”);
            session.setAttribute( “members”, memberList );
        }
    </jsp:scriptlet>

    <h2>All Member’s Info</h2>

    <display:table name=”sessionScope.members” pagesize=”5″ export=”true”>
        <display:column property=”name” title=”이름” sortable=”true” />
        <display:column property=”email” autolink=”true” sortable=”true”/>
        <display:column property=”phone” title=”연락처” sortable=”true”/>
        <display:column property=”blogAddress” title=”Blog” autolink=”true” sortable=”true”/>
        <display:column property=”messengerId” title=”MSN” sortable=”true”/>
    </display:table>_M#]추가 or 수정한 부분을 빨간표시를 했습니다.

DisplayTag 배끼기

DisplayTag 예제에 있는 css와 img파일을 가지고 마치 제것인양 써봤습니다.
사용자 삽입 이미지이전에 jstl을 사용해서 table을 출력 했던 화면을 DisplayTag를 사용하도록 바꾸려고 생각했는데예상 한 것 보다 시간이 오래 걸렸습니다. 그래도 위처럼 이쁘장한 화면으로 베낄 수 있었다는 것에 만족하며 잠들어야 겠습니다.

원래의 화면과 비교를 해보시면… 저의 만족감에 공감하실 수 있을지도…
bm244.bmp

주소록 개발 카탈로그

프로젝트 시작
개발 준비 작업
신나게 개발
개발 도중 공부
중간 점검
에피소드

JSP 화면 작성

참조 : Spring MVC 어플리케이션 개발 <9> JSP 화면 작성

이전에 컨트롤러를 만들고 viewResolver를 등록해서 적당한 jsp파일에 적당한 객체가 주어지도록 했습니다.[footnote]index.jsp 파일에 memberList 객체를 memberList 라는 이름으로 전달해 주었습니다.[/footnote] 하지만~ 그 객체를 써먹진 않고 그냥 “OK~”만 화면에 출력을 했었습니다.

이번에는 jstl을 사용해서 전달 받은 객체를 가지고 화면에 출력하는 jsp페이지를 만들겠습니다.

JSTL을 사용하기 위해서는 jstl.jar파일과 standard.jar파일이 필요합니다. 이 파일들은 http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 이곳에서 Taglib를 다운 받아 압축을 풀면 lib 디렉토리에서 찾을 수 있습니다.

위 두 파일을 WEB-INF/lib 폴더에 복사해서 추가를 한 뒤 index.jsp파일을 다음과 같이 수정했습니다.
[#M_ more.. | less.. | <%@ page language=”java” contentType=”text/html; charset=UTF-8″
    pageEncoding=”UTF-8″%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jstl/core_rt”%>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>Agile Java Network</title>
</head>
<body>
<table border=”1″>
    <caption>Agile Java Network’s All Members</caption>
    <tr align=”left”>
        <th>Name</th>
        <th>Blog</th>
        <th>E-mail</th>
        <th>Messenger ID</th>
        <th>Phone</th>
        <th>&nbsp;</th>
        <th>&nbsp;</th>
    </tr>
    <c:forEach var=”member” items=”${memberList}”>
        <tr>
            <td>${member.name}</td>
            <td><a href=”${member.blogAddress}” targer=”_blank”>보러가기</a></td>
            <td><a href=”mailto:${member.email}” target=”_blank”>보내기</a></td>
            <td>${member.messengerId}</td>
            <td>${member.phone}</td>
            <td><a href=”modify.do?id=${member}”>수정하기</a></td>
            <td><a href=”delete.do?id=${member.id}”>삭제하기</a></td>
        </tr>
    </c:forEach>
</table>
<table border=”1″>
    <tr>
        <td>Name</td>
        <td>Blog</td>
        <td>E-mail</td>
        <td>Messenger ID</td>
        <td>Phone</td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td><input type=”text” name=”name” /></td>
        <td><input type=”text” name=”phone” /></td>
        <td><input type=”text” name=”email” /></td>
        <td><input type=”text” name=”blogAddress” /></td>
        <td><input type=”text” name=”messengerID” /></td>
        <td><input type=”submit” value=”Add” /></td>
    </tr>
</table>
</body>
</html>_M#]
그리고 프로그램을 실행시켜 봅시다.
bl105.bmp
휴~ 기나긴 여정의 끝이 보이기 시작합니다.

앞으로 남은 일

1. 삭제하기 버튼을 클릭했을 때 정말 삭제할 것인지 확인 하는 팝업 창이 뜬 뒤에 수정을 해주고 다시 리스트를 뿌려주는 일.

2.수정하기 버튼을 클릭했을 때 수정하는 화면으로 넘어가는 일

3.수정하기 화면에서 수정 완료 버튼을 클릭하면 수정이 완료되었슴을 알리는 글자를 출력하고 다시 이 화면으로 넘어 오는 일

4. 새로운 멤버 추가 버튼(Add)을 클릭하면 새로운 멤버의 정보가 추가되었슴을 알려주고 다시 위 리스트를 보여주기.