2008年6月4日水曜日

Cubbyを使って更新情報を表示してみた。(更新ping受信サーバ作成その6)

更新ping受信してますよー、と言ってもデータベースに登録してるだけだと寂しいので見えるようにしてみました。
http://lab.ukauka.net/updateNews/list
です。
更新ping送ってみたい人は、 http://lab.ukauka.net/xmlrpc/ping まで送信してください。
しかしSeesaaの更新pingはすごい不安定ですねー。記事更新してwktkしながらapacheのログ監視してても全然こないことがあります。
Pingoo! というping一括送信サービスのSeesaaの説明でもSeesaaのping送信は不安定なのでトラックバックから更新pingを送信するのを推奨してました。
以下解説です。


Cubby(カビー)ですがセットアップはhttp://cubby.seasar.org/setup.htmlのMaven2 によるプロジェクトの雛形作成の説明通りに雛形を作成します。
Maven2は一度環境つくっておくと楽ですね。
今回はupdateNewsという名前のプロジェクトを作成しました。
http://lab.ukauka.net/updateNews/list
で表示されるようにする予定。
jdbc.dicon
s2jdbc.dicon
S2JDBCでデータベースアクセスをしてみた。(更新ping受信サーバ作成その5)
と同じ設定ですのでそのまま持ってきます。
app.diconには
<include path="s2jdbc.dicon"/>
を追加しておきます。
あと、convention.diconに以下の追加が必要でした。

これないとエラーが出ます。
以下のクラスを作成します。
net.ukauka.lab.updateNews.action.ListAction.java


package net.ukauka.lab.updateNews.action;
import java.util.List;
import net.ukauka.lab.updateNews.entitiy.UpdateEntry;
import net.ukauka.lab.updateNews.service.UpdateEntryService;
import org.seasar.cubby.action.Action;
import org.seasar.cubby.action.ActionResult;
import org.seasar.cubby.action.Forward;
public class ListAction extends Action {
public UpdateEntryService updateEntryService;
public List updateEntryList;
public ActionResult index() {
updateEntryList = updateEntryService.getUpdateEntryList(100);
return new Forward("index.jsp");
}
}


CubbyではActionのpublicフィールドでviewとデータをやりとりできます。beanなしでも大丈夫です。
updateEntryListがviewに表示する一覧の内容です。
indexというメソッドは特別でurlなしの意味になります。
この場合
http://lab.ukauka.net/updateNews/list
へのアクセスでindexメソッドが実行されます。
例えばaddというメソッド名にした場合は
http://lab.ukauka.net/updateNews/list/add
というURLになります。
net.ukauka.lab.updateNews.service.UpdateEntryService.java


package net.ukauka.lab.updateNews.service;
import java.util.List;
import net.ukauka.lab.updateNews.entitiy.UpdateEntry;
public interface UpdateEntryService {
public List getUpdateEntryList(int count);
}


DBからデータを取得するサービスのインタフェースです。
net.ukauka.lab.updateNews.service.impl.UpdateEntryServiceImpl.java


package net.ukauka.lab.updateNews.service.impl;
import java.util.List;
import net.ukauka.lab.updateNews.entitiy.UpdateEntry;
import net.ukauka.lab.updateNews.service.UpdateEntryService;
import org.seasar.extension.jdbc.JdbcManager;
public class UpdateEntryServiceImpl implements UpdateEntryService {
public JdbcManager jdbcManager;
public List getUpdateEntryList(int count) {
List list =
jdbcManager
.from(UpdateEntry.class)
.orderBy("date desc")
.maxRows(count)
.getResultList();
return list;
}
}


S2JDBCはDAO使わなくていいので楽です。
特に説明するほどのものでもないんですが、update_entryというテーブルから日付降順で最大100件のデータを取得しています。
UpdateEntryは前回と同じです。が、getterがないとviewからアクセスできなかったんでgetterは生成しておきました。
list/index.jsp


<table>
<tr>
<th>更新時間
<th>更新記事
<th>ブログ名
</tr>
<c:forEach var="updateEntry" items="${action.updateEntryList}" varStatus="status">
<tr>
<td>${f:dateFormat(updateEntry.date, 'yyyy-MM-dd HH:mm:ss')}</td>
<td><a href="${updateEntry.link}">${updateEntry.title}</a></td>
<td><a href="${updateEntry.weblogurl}">${updateEntry.weblogname}</a></td>
</tr>
</c:forEach>
</table>


表示部分のみ抜粋。
アクションで設定されたデータにアクセスするには${action.フィールド名}です。
今回は表示だけなのであまり面白くないですねw 入力ないんでバリデーションもないですし。

0 件のコメント:

コメントを投稿