<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://townhost.townsystem.co.jp/paraselene/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://townhost.townsystem.co.jp/paraselene/feed.php">
        <title>Paraselene - Java Webアプリケーション フレームワーク 3.tutorial3</title>
        <description></description>
        <link>http://townhost.townsystem.co.jp/paraselene/</link>
        <image rdf:resource="http://townhost.townsystem.co.jp/paraselene/lib/images/favicon.ico" />
       <dc:date>2023-01-04T02:53:59+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/1.tutorial31"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/2.tutorial32"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/3.tutorial33"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/4.tutorial34"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/5.tutorial35"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/6.tutorial36"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/7.tutorial37"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/8.tutorial38"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/9.tutorial39"/>
                <rdf:li rdf:resource="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/start"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://townhost.townsystem.co.jp/paraselene/lib/images/favicon.ico">
        <title>Paraselene - Java Webアプリケーション フレームワーク</title>
        <link>http://townhost.townsystem.co.jp/paraselene/</link>
        <url>http://townhost.townsystem.co.jp/paraselene/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/1.tutorial31">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T12:20:22+00:00</dc:date>
        <title>チュートリアル1(モックアップ)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/1.tutorial31</link>
        <description>今回はブログ(のようなもの)を作成します。

画面が大きいので、

動作は以下のようにします。

	*  最近の記事は、最大５件を表示。
	*  中央部の記事は３件まで表示。
 それより多い場合は、前へ、次へリンクで移動。
	*  ホームリンクは先頭へ戻る。
	*  写真は上下、最大２ヶ所。
	*  ログインのパスワードは&quot;pass&quot;。
	*  削除用投稿リストは、全件そのまま表示する。
	*  新規投稿はできるが、修正機能は持たない。
	*  本文はタグをそのまま書きこむようにする。
 改行も&lt;BR&gt;と書かなくてはならない。
	*  アップロードするものは、拡張子が jpg でなければエラーとする。
	*  アップロードした画像は、&quot;/tmp/blog/&quot;の下に保存する。
 また、表示もそれを参照する。
	*  画像は必須項目としない。
 カテゴリは最低１つ選ばせる。
 それ以外は必須項目。
	*  例によって DB 等使わず、単純に変数上で管理する。…</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/2.tutorial32">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T12:29:51+00:00</dc:date>
        <title>チュートリアル2(スケルトン)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/2.tutorial32</link>
        <description>ダウンロード専用クラス

いつものようにスケルトンを生成しますが、up.jpg と down.jpg はサンプル用に入れているだけなので不要です。これらは削除してツールにかけます。

その代わり、この写真を表示するためのロジックが必要です(/tmp/blog/ の下は、http アクセスで直接表示可能な場所ではない)。

html と同じ場所に、photo という名前の空ファイルを置いておきます。

これは HTML テキストではなく、何らかのデータをダウンロードさせるためのクラスとなります。…</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/3.tutorial33">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T12:39:07+00:00</dc:date>
        <title>チュートリアル3(削除機能)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/3.tutorial33</link>
        <description>まず、管理者画面の削除機能から実装します。



public class AdminHtml extends tutorial3.view.AdminHtml {
    private Line    org_line;



    public void init(){
        super.init();
        // モックアップHTMLの内容と異なる内容で初期化したい場合は
        // super.init()の後に変更用の処理を記述して下さい。
        // このメソッドは上記コンストラクタの中から呼ばれます。
        // インスタンス発生はバックグラウンドで非同期に処理していますので
        // HTTPリクエスト発生よりずっと過去に初期化されます。
        // このため、ユーザーのトランザクションに応じた条件分岐を設けても
        // 意図した振る舞いになりません。

        org_line = getDeleteListTable().getLineReplica( 1 );
   …</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/4.tutorial34">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T13:05:15+00:00</dc:date>
        <title>チュートリアル4(投稿フォーム)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/4.tutorial34</link>
        <description>下部の投稿フォームを実装します。
まずは初期化処理を記述します。



    public void init(){
        super.init();
        // モックアップHTMLの内容と異なる内容で初期化したい場合は
        // super.init()の後に変更用の処理を記述して下さい。
        // このメソッドは上記コンストラクタの中から呼ばれます。
        // インスタンス発生はバックグラウンドで非同期に処理していますので
        // HTTPリクエスト発生よりずっと過去に初期化されます。
        // このため、ユーザーのトランザクションに応じた条件分岐を設けても
        // 意図した振る舞いになりません。

        org_line = getDeleteListTable().getLineReplica( 1 );

        getTitleInput().setTitle( &quot;タイトル&quot; );
        getTextTextarea().setTitle( &quot;本…</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/5.tutorial35">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T13:12:29+00:00</dc:date>
        <title>チュートリアル5(ブログ画面)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/5.tutorial35</link>
        <description>メインページ、ブログの画面を実装します。

まずは簡単なログインから。



    public Forward inputMain( RequestParameter req, Forward fw ) throws PageException {
        // fwにはモックアップと同じ遷移先が設定されています。
        // 別の遷移先としたい場合は、新しくForwardインスタンスを生成して
        // リターンして下さい。
        if ( getLoginInput().isClicked() ) {
            try {
                if ( !getPasswordInput().getValueString().equals( &quot;pass&quot; ) ) {
                    throw new Exception();
                }
            }
            catch( Exception e ) {
               …</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/6.tutorial36">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T13:23:42+00:00</dc:date>
        <title>チュートリアル6(記事生成)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/6.tutorial36</link>
        <description>では記事生成部を作成します。

記事は３つまでの繰り返しとなりますが、普通にやろうと思うと Paraselene では簡単に作成できません。name が被ると配列化を引き起こすため各&lt;DIV&gt;の特定が困難になります。

そのため、BlogHtml インスタンスをもう１つ準備し、そこへ記事を書き込み、記事部分を丸ごと this へ複製する事で処理を実現する事にします。</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/7.tutorial37">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T13:40:53+00:00</dc:date>
        <title>チュートリアル7(ページ切替)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/7.tutorial37</link>
        <description>リンクの設定

続いて、ページ切り替え用のリンクを設けます。



    private Tag makeLink( String str, int page_no, int article_no ) throws PageException {
        String  query = &quot;page=&quot; + Integer.toString( page_no );
        String  fragment = null;
        article_no %= MAX_ARTICLE;
        if ( article_no &gt; 0 ) {
            fragment = &quot;jump&quot; + Integer.toString( article_no );
        }
        URIAttribute    href = createPageToURI( &quot;href&quot;, PageType.BLOG_HTML, fragment, query );
        Tag tag = new Tag( &quot;a&quot;, false );
  …</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/8.tutorial38">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T13:57:58+00:00</dc:date>
        <title>チュートリアル8(Dawnloadable)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/8.tutorial38</link>
        <description>スケルトンソース

最後に画像表示部分を実装します。スケルトン生成時に指定した photo という空ファイルが元になった Photo クラスを使用します。

HTML ではないものをブラウザへ送信する役目を持ちます。実際のソースを確認してみます。</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/9.tutorial39">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-16T14:06:04+00:00</dc:date>
        <title>チュートリアル9(画像表示)</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/9.tutorial39</link>
        <description>ブログページの画像部分を実装します。



    private void setImagePath( Attribute attr, int article_no, int image_no ) {
        Article article = Article.db.get( article_no );
        String  path = URIAttribute.pageToDownloadURI( PageType.PHOTO, new java.io.File( article.image[image_no] ).getName(), Photo.ARTICLE + &quot;=&quot; + Integer.toString( article_no ), Photo.IMAGE + &quot;=&quot; + Integer.toString( image_no ) );
        attr.set( path );
    }</description>
    </item>
    <item rdf:about="http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/start">
        <dc:format>text/html</dc:format>
        <dc:date>2009-10-17T01:59:30+00:00</dc:date>
        <title>アップロード ダウンロード</title>
        <link>http://townhost.townsystem.co.jp/paraselene/doku.php/3.tutorial3/start</link>
        <description>&lt;IMG&gt;タグ用の画像ファイルをアップロードし、それを表示する例を使ったチュートリアルです。

	*  チュートリアル1(モックアップ)
	*  チュートリアル2(スケルトン)
	*  チュートリアル3(削除機能)
	*  チュートリアル4(投稿フォーム)
	*  チュートリアル5(ブログ画面)
	*  チュートリアル6(記事生成)
	*  チュートリアル7(ページ切替)
	*  チュートリアル8(Dawnloadable)
	*  チュートリアル9(画像表示)…</description>
    </item>
</rdf:RDF>
