PlayFramework は APP を完全に実装します (8)

黄舟
リリース: 2016-12-23 16:44:17
オリジナル
1193 人が閲覧しました

创建Tag标签

1.创建Model

@Entity
@Table(name = "blog_tag")public class Tag extends Model 実装 Comparable {
public 文字列名。    
PRivate Tag(String name) { this.name = name;
}
public String toString() { return name;
}
public int CompareTo(Tag otherTag) { return name.compareTo( otherTag.name);
}
public static Tag findOrCreateByName(String name) {
Tag tag = Tag.find("byName", name).first();        if(tag == null) {
tag = new Tag(name);
} return tag;
}}

2.Post类追加タグ属性

@ManyToMany(cascade = CascadeType.PERSIST)public設定(&L) ;タグ>タグ;パブリック投稿(ユーザー作成者、文字列タイトル、文字列コンテンツ) {
this.comments = new ArrayList();        this.tags = 新しい TreeSet();        this.author = 著者;        this.title = タイトル;        this.content = コンテンツ;        this.postedAt = new Date();
}

3.Post类追加方法

关联Post和Tag

public Post tagItWith(String name) {
tags.add(Tag.findOrCreateByName(name)) ;        return this;
}

戻り关联指定タグのPost集合

public static List findTaggedWith(String... tags) { return Post.find( 「Post p から個別の p を選択 p.tags を t として結合する (:tags) の t.name は p.id、p.author、p.title、 count(t.id) = :size"
を持つ p.content,p.postedAt ).bind("tags", tags).bind("size", tags.length).fetch();
}

4.写测试用例

@Testpublic void testTags() { // 新しいユーザーを作成して保存します
User bob = new User("bob@Gmail.com", "secret", "Bob").save ();    
// 新しい投稿を作成します
Post bobPost = new Post(bob, "最初の投稿", "Hello world").save();
別の投稿BobPost = new Post(bob, "Hop", "Hello world") 。保存();        
// さて
assertEquals(0, Post.findTaggedWith("Red").size());        
// 今すぐタグ付けします
bobPost.tagItWith("Red").tagItWith("Blue").save();
anotherBobPost.tagItWith("Red").tagItWith("Green").save();        
// Check
assertEquals(1, Post.findTaggedWith("Red", "Blue").size());  
assertEquals(1, Post.findTaggedWith("Red", "Green").size());  
assertEquals(0, Post.findTaggedWith("Red", "Green", "Blue").size());  
assertEquals(0, Post.findTaggedWith("Green", "Blue").size());   }

测试タグ

5.继续修正タグ类、追加方法

public static List getCloud() {
リスト result = Tag.find( "新しいマップ(t.nameをタグとして、count(p.id)をポンドとして)をPost pから選択し、p.tagsをtグループとしてt.nameで並べ、t.nameで並べます"
).fetch ();        return result;
}

6. 页面上にタグを追加します

/yabe/conf/initial-data.yml 追加配置データセット

タグ(再生):
名前: 再生

タグ(アーキテクチャ):
名前: アーキテクチャ

タグ(テスト):
名前: テスト

タグ(mvc) :
名前: MVC

Post(jeffPost): -
- アーキテクチャ
- mvc
content: >
A Play




7.display.htmlを修正tag显示出来






8.追加listTagged メソッド(アプリケーションコントローラー)
点击タグ付き、タグ付きのすべての投稿リストを表示します

public static void listTagged(String tag) {

List photos = Post.findTaggedWith(tag);

render(tag, 投稿);

}




9.修改display.html,タグ显示

-

#{リスト項目:_post.tags, としてタグ付けしました:' tag'}

${tag}${tag_isLast ? '' : ', '}

#{/list}




10.AddRoute

GET /posts/{tag} Application.listTagged

现在有两条Ro ute规则URL無法区別

GET /posts/{id} Application.show

GET /posts/{tag} Application.listTagged

{id}追加规则


GET / photos/{id} アプリケーション.show

11.追加投稿リスト页面、同タグ付き投稿

创建/app/views/Application/listTagged.html

#{extends 'main.html' /}

#{set title: ' + タグでタグ付けされた投稿 /}

*{********* タイトル ********* }*

#{if Posts.size()>1}

${tag}タグが付いた投稿は ${posts.size()} 件あります
#{/if}
#{elseif 投稿}

「${tag}」タグが付いた投稿は 1 件あります'

 
#{/elseif}
#{else}

「${tag}」タグが付いた投稿はありません


#{/else}

*{********* 投稿リスト *********}*
   
#{list items:posts, as:'post'}
#{display post:post, as:'teaser' /}
#{/list}






效果:

PlayFramework は APP を完全に実装します (8) 就是PlayFramework完整以上实现一APP(八)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

関連ラベル:
app
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!