게시물 목록 페이지 수정#

게시물 보기 페이지는 목록 페이지에서 게시물 제목에 링크를 걸어서 볼 수 있도록 할 것이다. 따라서 게시물 목록 페이지에 Link 컴포넌트를 추가해야한다. 아래는 게시물 보기 페이지 링크가 추가된 ListBoard 클래스와 HTML 템플릿 코드이다.

ListBoard.java

package example.board.page;
import net.databinder.components.DataPage;
import net.databinder.components.DateLabel;
import net.databinder.models.DatabinderProvider;
import org.hibernate.Query;
import wicket.PageParameters;
import wicket.extensions.markup.html.repeater.data.DataView;
import wicket.extensions.markup.html.repeater.data.IDataProvider;
import wicket.extensions.markup.html.repeater.refreshing.Item;
import wicket.markup.html.basic.Label;
import wicket.markup.html.link.BookmarkablePageLink;
import wicket.markup.html.navigation.paging.PagingNavigator;
import wicket.model.CompoundPropertyModel;
import wicket.util.string.StringValueConversionException;
import example.board.model.Board;
public class ListBoard extends DataPage {
    private static final long serialVersionUID = 6428023586056929600L;
    @SuppressWarnings("serial")
    public ListBoard(PageParameters params) {
        int currentPage = 0;
        try {
            currentPage = params.getInt("currentPage");
        catch (StringValueConversionException e) { }
        DataView boards = new DataView(
                "boards",
                new BoardProvider(
                        "from Board board where board.level = 0 and board.isDelete = 0 order by board.thread desc"),
                10) {
            public void populateItem(final Item item) {
                final Board board = (Boarditem.getModelObject();
                item.setModel(new CompoundPropertyModel(board));
                item.add(new Label("id"));
                item.add(new Label("writer"));
                item.add(new DateLabel("writeDate""yyyy-MM-dd"));
                item.add(new Label("readCount"));
                PageParameters params = new PageParameters();
                params.put("id", board.getId());
                params.put("currentPage", getCurrentPage());
                BookmarkablePageLink linkToViewBoard = new BookmarkablePageLink(
                        "linkToViewBoard", ViewBoard.class, params);
                linkToViewBoard.add(new Label("title"));
                item.add(linkToViewBoard);
            }
        };
        boards.setCurrentPage(currentPage);
        add(boards);
        BookmarkablePageLink linkToWriteBoard = new BookmarkablePageLink(
                "linkToWriteBoard", WriteBoard.class);
        add(linkToWriteBoard);
        add(new PagingNavigator("navigator", boards));
    }
    @Override
    protected String getName() {
        return "게시물 목록";
    }
    @SuppressWarnings("serial")
    class BoardProvider extends DatabinderProvider.QueryBinder implements
            IDataProvider {
        public BoardProvider(String queryString) {
            super(queryString);
        }
        public void bind(Query query) {
        }
    }
}

굵 은 글씨로 된 부분이 추가된 내용이다. Wicket에서 지원하는 PageParameters 클래스에 게시물 id와 게시물 보기 페이지에서 다시 목록 페이지로 돌아올 때 페이지 번호를 기억할 수 있도록 현재 페이지 번호를 파라미터로 넘긴다.

ListBoard.html

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:wicket="http://wicket.sourceforge.net/" lang="euc-kr">
<head>
<link
    href="http://localhost:8080/app/resources/net.databinder.components.DataPage/DataPage.css"
    type="text/css" rel="stylesheet" />
<title>글 목록</title>
</head>
<body>
<wicket:extend>
    <wicket:child />
    <table width="700" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <th width="60">번호</th>
            <th>제목</th>
            <th width="100">작성자</th>
            <th width="120">날짜</th>
            <th width="60">조회수</th>
        </tr>
        <tr wicket:id="boards">
            <td align="center"><span wicket:id="id">[번호]</span></td>
            <td><a href="#" wicket:id="linkToViewBoard"><span
                wicket:id="title">[제목]</span></a></td>
            <td align="center"><span wicket:id="writer">[작성자]</span></td>
            <td align="center"><span wicket:id="writeDate">[날짜]</span></td>
            <td align="center"><span wicket:id="readCount">[조회수]</span></td>
        </tr>
    </table>
    <span wicket:id="navigator">[dataview navigator]</span>
    <br />
    <a href="#" wicket:id="linkToWriteBoard">글쓰기</a>
</wicket:extend>
</body>
</html>

굵은 글씨로 된 부분이 링크가 추가된 템플릿이다.

게시물 보기 페이지#

게 시물 보기 페이지의 코드도 매우 간단하다. 목록 페이지에서 넘긴 id 파라미터를 받아서 Databinder에서 지원하는HibernateObjectModel 클래스를 생성하면 해당 게시물을 DB에서 읽어와서 Board 객체를 생성해 준다. ViewBoard 클래스와 HTML 템플릿 코드는 아래와 같다.

ViewBoard.java

package example.board.page;
import net.databinder.DataRequestCycle;
import net.databinder.components.DataPage;
import net.databinder.components.DateLabel;
import net.databinder.models.HibernateObjectModel;
import wicket.PageParameters;
import wicket.markup.html.basic.Label;
import wicket.markup.html.link.BookmarkablePageLink;
import wicket.model.CompoundPropertyModel;
import wicket.util.string.StringValueConversionException;
import example.board.model.Board;
public class ViewBoard extends DataPage {
    private static final long serialVersionUID = -4254581267806411773L;
    public ViewBoard(PageParameters params) {
        long id = 0;
        try {
            id = params.getLong("id");
        catch (StringValueConversionException e) {
        }
        // id에 해당하는 게시물을 DB에서 가져온다.
        final Board board = (Boardnew HibernateObjectModel(Board.class, id)
                .getObject(null);
        board.setReadCount(board.getReadCount() 1)// 게시물 조회수 증가
        // 게시물 조회수에 대한 DB 업데이트 처리
        DataRequestCycle.getHibernateSession().merge(board);
        DataRequestCycle.getHibernateSession().getTransaction().commit();
        CompoundPropertyModel boardModel = new CompoundPropertyModel(board);
        setModel(boardModel);
        add(new Label("id"));
        add(new Label("writer"));
        add(new Label("email"));
        add(new Label("title"));
        add(new DateLabel("writeDate""yyyy-MM-dd HH:mm:ss"));
        add(new Label("readCount"));
        Label displayContent = new Label("displayContent");
        displayContent.setEscapeModelStrings(false);
        add(displayContent);
        // 게시물 목록 페이지 링크.
        // id와 현재 페이지를 가지고 있는 PageParameters를 파라미터로 넘긴다.
        BookmarkablePageLink linkToListBoard = new BookmarkablePageLink(
                "linkToListBoard", ListBoard.class, params);
        add(linkToListBoard);
    }
    @Override
    protected String getName() {
        return "게시물 보기";
    }
}

게시물을 DB에서 가져오고 조회수를 증가시킨 다음에 DB를 업데이트 시킨다. 이 클래스도 게시물 내용만 보여주고 폼 전송 처리가 없기 때문에 생성자에서 컴포넌트 구성만 하면 된다.

ViewBoard.html

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:wicket="http://wicket.sourceforge.net/" lang="euc-kr">
<head>
<link
    href="http://localhost:8080/app/resources/net.databinder.components.DataPage/DataPage.css"
    type="text/css" rel="stylesheet" />
<title>글 보기</title>
</head>
<body>
<wicket:extend>
    <table width="700" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td width="60" align="center">번호</td>
            <td align="center"><span wicket:id="id">[번호]</span></td>
            <td width="60" align="center">조회수</td>
            <td align="center"><span wicket:id="readCount">[조회수]</span></td>
        </tr>
        <tr>
            <td width="60" align="center">작성자</td>
            <td><span wicket:id="writer">[작성자]</span></td>
            <td width="60" align="center">E-mail</td>
            <td align="center"><span wicket:id="email">[E-mail]</span></td>
        </tr>
        <tr>
            <td width="60" align="center">제목</td>
            <td width="350"><span wicket:id="title">[제목]</span></td>
            <td width="60" align="center">작성일</td>
            <td align="center"><span wicket:id="writeDate">[작성일]</span></td>
        </tr>
        <tr>
            <td colspan="4" align="center">내용</td>
        </tr>
        <tr>
            <td colspan="4"><span wicket:id="displayContent">[내용]</span></td>
        </tr>
    </table>
    <a href="#" wicket:id="linkToListBoard">목록</a>
    <p></p>
</wicket:extend>
</body>
</html>

3-1.jpg

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
jpg
3-1.jpg 346.8 kB 1 14-Dec-2006 08:44 이동국
« This page (revision-1) was last changed on 14-Dec-2006 08:44 by 이동국