アプリ開発

playframework2のテンプレート内で繰り返し

投稿日:2013/05/29 更新日:

前回からの続きです。
Twitterから取得したタイムラインを表示する部分を作成します。
取得したタイムラインを繰り返し表示する必要があります。
というわけで、今回はPlayframework2のテンプレート内で繰り返しなどの制御をしてみたいと思います。

Twitter用のオブジェクトを作成

基本的に、Twitter4jのオブジェクトを使いますが、集約するためのオブジェクトを作ります。
twitterパッケージを作成して、TwitterInfoというクラスを作成しました。
取り急ぎ、以下のようなクラスを作成します。

package twitter;

public class TwitterInfo {
	public String screen_name;
	public String description;
	public List<Tweet> tweets;
}

もう一つ、ツイート情報を保持するクラスを作成します。

public class Tweet {
	public String text;
}

とりあえず、今はこれで。後から色々追加するかもしれません。

Playframework2のテンプレートの引数を変更

これが、ハマりました。
scalaのインポート方法調べて、書いたんですけど、認識してくれなくて・・・。

@(twitter_info: TwitterInfo)
@import twitter._

使っているオブジェクトの後にインポート文があるので、ダメなんでしょうけど。インポート文を上に持っていてもダメだったので、諦めました。後ほど、要調査。
project/Build.scalaというファイルがあるので、こちらにインポート文を記載しました。

  val main = play.Project(appName, appVersion, appDependencies).settings(
    // Add your own project settings here      
    templatesImport += "twitter._"
  )

これで、無事にコンパイルできるようになりました。

Application.javaの修正

これで、要約Application.javaの修正を行えます・・・。
timelineメソッドを修正します。

とりあえず確認が目的なので、Twitterからデータを取得せずに、自作自演します。

    public static Result timeline() {
    	TwitterInfo ti = new TwitterInfo();
    	ti.screen_name = "テスト(名前)";
    	ti.description = "テスト(概要)";
    	
    	List<Tweet> tweets = new ArrayList<Tweet>();
    	tweets.add(createTweet("1ツイート"));
    	tweets.add(createTweet("2ツイート"));
    	tweets.add(createTweet("3ツイート"));
    	tweets.add(createTweet("4ツイート"));
    	ti.tweets = tweets;

    	return ok(timeline.render(ti));
    }

    private static Tweet createTweet(String text) {
    	Tweet tweet = new Tweet();
    	tweet.text = text;
    	
    	return tweet;
    }

timeline.scala.htmlの修正

お待たせしました。これでようやく本記事のメインのテンプレート内での繰り返しが行えます。長かった・・・。

繰り返しの書き方は単純で、@for(){}です。まぁ、
ちなみに、この中で分岐とかできるのかな。また今度調べてみます。

@(twitter_info: TwitterInfo)
@main("Welcome to Play 2.1") {
      <!-- Main hero unit for a primary marketing message or call to action -->
      <div class="hero-unit">
        <h1>@twitter_info.screen_name</h1>
        <p>@twitter_info.description</p>
        <p><a href="#" class="btn btn-primary btn-large">Learn more &raquo;</a></p>
      </div>
      <!-- Example row of columns -->
      <div class="row">
      @for(tweet <- twitter_info.tweets) {
        <div class="span4">
          <p>@tweet.text</p>
          <p><a class="btn" href="#">View details &raquo;</a></p>
        </div>
      }
      </div>
}

実行してみる

Welcome to Play 2.1-4
Application.javaに書いた内容が表示されています。

表示させている内容が単純なので、なんとも言えないですが、とりあえずインポートの部分でかなり時間を割いてしまいました。
多分ですが、引数で使用するクラスはグローバルでインポートして、テンプレート内部で使用するクラスは、テンプレート内でインポートで大丈夫じゃないかなーと、勝手に思っています。

-アプリ開発
-

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

no image

Twitterアプリの画面サンプル

Playframework2で作っているアプリですが、Twitterのタイムラインをどんなふうに表示させようかなーと思って、bootstrapのページを色々みているのですが、先の記事の画面でとりあえず …

no image

MacにPlayframework2をインストールする

実は、わたくし今までほとんどフレームワークらしいフレームワークは使ったことがありません。 さすがに、そろそろフレームワークでも触ってみようかと思って色々調べました。 一応この業界に10年ほどいるんです …

no image

playframework2でテストをしてみる

Playframework2のパッケージ構成をみてみると、testパッケージがあります。 ApplicationTest.javaというソースコードがあり、この中をみてみると、 public clas …

no image

Playframework2にTwitter Bootstrapを導入してみる

先日から作っているPlayframework2でTwitterのタイムラインを表示させるアプリケーションですが、せっかくなのでTwitter Bootstrapを使って見ることにしました。 Playf …

no image

Playframework2を使って何か作る・・・の巻

今、Playframework2のインストールを行なって、アプリを作っただけですが、やっぱり単にチュートリアル系をやっただけだと、どうも理解した気にしかならないので、何か作ってみようと思います。 恥ず …