Heim  >  Artikel  >  Java  >  PlayFramework implementiert eine APP vollständig (8)

PlayFramework implementiert eine APP vollständig (8)

黄舟
黄舟Original
2016-12-23 16:44:171233Durchsuche

创建Tag标签

 

1.创建Model

@Entity
@Table(name = "blog_tag")public class Tag erweitert Model implementiert Comparable {
   public String name;    
   PRivate Tag(String name) {        this.name = name;
   }    
   public String toString() {        return name;
   }    
   public int CompareTo(Tag otherTag) {        re Namen drehen. 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类添加Tag属性

@ManyToMany(cascade = CascadeType.PERSIST)public Set tags;public Post(Benutzerautor, String-Titel, String-Inhalt) {
       this.comments = new ArrayList();        this.tags = new TreeSet();        this.author = Autor;        this.title = Titel;        this.content = Inhalt;        this.postedAt = new Date();
}

 

3.Post类添加方法

关联Post和Tag

öffentlicher Beitrag tagItWith(String name) {
       tags.add(Tag.findOrCreateByName(name));        return this;
}

  

返回关联指定Tag的Post集合

public static List findTaggedWith(String... tags) {        return Post.find(                "wählen Sie ein bestimmtes p aus dem Beitrag aus p verbinden Sie p.tags als t, wobei t.name in (:tags) gruppiert nach p.id, p.author, p.title, p.content,p.postedAt mit count(t.id) = :size"
       ).bind("tags", tags).bind("size", tags.length).fetch();
}

 

4.写测试用例

@Testpublic void testTags() {        // Erstellen Sie einen neuen Benutzer und speichern Sie ihn
       Benutzer bob = neu User("bob@Gmail.com", "secret", "Bob").save();    
       // Einen neuen Beitrag erstellen
       Post bobPost = new Post(bob, "My first post", "Hello world").save();
       Post anotherBobPost = new Post(bob, "Hop" , „Hallo Welt“).save();        
       // Nun ja
       assertEquals(0, Post.findTaggedWith("Red").size());        
       // Tag it now
       bobPost.tagItWith("Red").tagItWith("Blue").save();
       anotherBobPost.tagItWith("Red").tagItWith("Green"). speichern();        
       // Prüfen
       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());   }

测试Tag

 

 5.继续修改Tag类,添加方法

public static List getCloud() {
       List result = Tag.find(            "select new map(t.name as tag, count(p.id) as pound) from Post p join p.tags as t group by t.name order by t.name"
       ) .bringen();        Rückgabeergebnis;
}

 

6.将Tag添加到页面上

/yabe/conf/initial-data.yml 添加预置数据

Tag(play):
   Name:           Play

Tag(architecture):
   name:           Architecture

Tag(test):
   name:           Test

Tag(mvc):
   Name:           MVC

Beitrag(jeffPost):
   Titel:          Die MVC-Anwendung
   gepostet am:       2009-06-06
   Autor:        jeff
   tags:          
                   - spielen
                   - Architektur
                    - mvc
   Inhalt:       >
                   Ein Stück

  

7.修改display.html将tag显示出来


  

8. 添加 ListTagged 方法 (Anwendungscontroller)

点击 markiert , 显示 所有 带有 Tag 的 Post 列表

public static void Listagged (String -Tag) {🎜> list & lt; Beitrag> posts = Post.findTaggedWith(tag);
   render(tag, posts);
}

 

9.修改display.html,Tag显示

- Tagged

#{list items:_post.tags, as:'tag'}
   ${tag} ${tag_isLast ? '' : ', '}
#{/list}

  

10.添加Route

GET     /posts/{tag}                    Application.listTagged


  

现在有两条Route规则URL无法区分

GET     /posts/{id}                         Application.show

GET     /posts/{tag} Application.listTagged

为{id}添加规则

GET     /posts/{id}                 Application.show


  

11.添加Post list页面,有相同Tag的Post

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

#{extends 'main. html' /}

#{set title:'Beiträge getaggt mit ' + Tag /}

*{*********** Titel ********* }*
#{if posts.size()>1}

Es gibt ${posts.size()}-Beiträge mit dem Tag ${tag}


#{/if }
#{elseif posts}
   

Es gibt 1 Beitrag mit dem Tag „${tag}“

 
#{/elseif}
#{else}
   

Kein Beitrag mit dem Tag „${tag}“


#{/else}

*{********* Beitragsliste *********}*
   
#{list items:posts, as:'post'🎜> #{display post:post, as:'teaser' /}
#{/list}



  

 

效果:

PlayFramework implementiert eine APP vollständig (8)

PlayFramework implementiert eine APP vollständig (8) 以上就是PlayFramework完整实现一个APP(八)的内容,更多相关内容请关注PHP中文网(www.php.cn)! 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn