« コメントスパムを防御できた! | メイン | Tomcat5.5.2 »
Tomcat5.5でMovableTypeのエントリーの表示
2004年09月16日
先日のサンプルJSPをもう少しだけバージョンアップしました。

とても簡単でシンプルすぎるくらいシンプルなのですが、
エントリー一覧から、エントリーの内容を表示するものです。

エントリー一覧

リンクをクリックすると、さらにJSPでエントリーの内容を表示するようにしてみました。
jspの構成は2つからなります。

entry_list.jsp...エントリーの一覧を表示するもの。
entry.jsp...ひとつのエントリーの内容を表示するもの。

entry.jspには引数としてentry_idを与えます。パラメタ名は"id"です。


(1)entry_list.jsp
<% response.setContentType("text/html;charset=UTF-8"); %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<%@ page pageEncoding="euc-jp" %>

<sql:query var="rs" dataSource="jdbc/postgres">
    select  entry_id,entry_title
    from    mt_entry
    where   entry_status = 2
    order by entry_created_on desc
</sql:query>

<html>
<head>
    <title>Entries</title>
    <link rel="stylesheet" href="http://blog.kiyo.com/styles-site.css" type=
"text/css" />
</head>
<body>
    <div id="container">
        <div id="banner">
        <h1><a href="http://blog.kiyo.com/">megu's blog</a></h1>
        </div>
        <div class="content">
            <div class="contenttitle">
                Entry Titles
            </div>
            <c:forEach var="row" items="${rs.rows}">
                <html:link action="entry.jsp?id=${row.entry_id}">
                   ${row.entry_title}</html:link><br />
            </c:forEach>
        </div>
    </div>
</body>
</html>
エントリーリストを表示するjspです。
とりあえずは、エントリーのタイトルだけを、登録日の降順に表示しています。
クエリは

select entry_id,entry_title
from mt_entry
where entry_status = 2
order by entry_created_on desc

の部分です。検索条件の entry_status = 2というのは下書きモードのものを除いています。

リンク部分は、htmlタグを用いています。
<html:link action="entry.jsp?id=${row.entry_id}">
の部分です。
とび先は、entry.jsp、idにqueryから取得したentry_idを指定しています。


(2)entry.jsp
% response.setContentType("text/html;charset=UTF-8"); %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<%@ page pageEncoding="euc-jp" %>

<sql:query var="q_entry" dataSource="jdbc/postgres">
    select  entry_title
            ,case
                when entry_convert_breaks = '0' then
                    entry_text||entry_text_more
                else
                    replace(entry_text ,'\n','<br />\n')
                    ||
                    replace(entry_text_more , '\n','<br />\n')
            end as entry_text
    from    mt_entry
    where   entry_id  =  ?
    <sql:param value="${param['id']}" />
</sql:query>

<html>
<head>
    <title>entry</title>
    <link rel="stylesheet" href="http://blog.kiyo.com/styles-site.css" type=
"text/css" />
</head>
<body>
    <c:forEach var="row" items="${q_entry.rows}">
    <div id="container">
        <div id="banner">
        <h1><a href="http://blog.kiyo.com/">megu's blog</a></h1>
        </div>
    <html:link action="entry_list.jsp">Back</html:link>
        <div class="content">
            <div class="contenttitle">
                ${row.entry_title} <br />
            </div>
                ${row.entry_text} <br />
        </div>
    <html:link action="entry_list.jsp">Back</html:link>
    </div>
    </c:forEach>
</body>
</html>
上はひとつのエントリーの内容を表示するjspです。
ちょっぴり工夫(?)したのは、Convert Line Breaksの指定。
これが指定されている場合は、改行コードをbrタグに置き換えないといけないので。
でも、指定されていない場合はそのままの表示です。
この対応は、クエリ上でやってしまうことにしました。caseを使いました。
entry_convert_breaksが'0'の場合はそのまま
'1'の場合は、改行コードを変換しています。

また、バインド変数の指定ですが、
<sql:param value="${param['id']}" />
こうやって指定します。
(?が出てきた順に割り当てられます。)

※実は、クエリが1行しか値を返さないときの、値のとり方がわかっていないのです(恥)。
なので、forEach使っちゃっていますが、もっと良い方法がみつかったらまた更新することにします。


本当は....

MTのテンプレートをまだまだ使いこなせない私は(使いこなせないどころかちっともわかっていない)、自分でもできそうなsqlタグでのアクセスが楽しくてたまりません。
これなら、いろいろできそうです。
テーブル構成さえわかれば、条件も好き勝手に検索できるし。更新もできます。

でも、本来の目的からははずれちゃっていますね(笑)。
そもそも、MTを使っているのだから.....

このエントリーの目的は、Tomcat5.5とコネクションプール、それからタグライブラリの使い方のメモであって、エントリーを表示するのが目的ではないはず....。でした。

投稿者 megu : 2004年09月16日 19:16

コメント

コメントしてください




保存しますか?