2012-03-08 54 views
2

我正在创建一个简单的博客Web应用程序使用播放框架,其中有某些类别和用户可以发布到他们想要的类别,但问题是,当我发布到一个类别该帖子也发布到所有类别。使用播放框架的博客Web应用程序的逻辑错误

Application code: 
    import java.util.*; 
    import models.*; 
    public class Application extends Controller { 
     public static void index() { 
      List Posts = Post.find ("order by type desc").fetch(); 
      render(Posts); 
     } 
     public static void addpost (String content) { 
      Post post = new Post(content).save(); 

      renderJSON(content); 
html code:     
<h2> 
     CollabBlog 
    </h2> 
#{extends 'main.html' /} 
#{set title:'Home' /} 
<head> 
     <title>#{get 'title' /}</title>  
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <link rel="stylesheet" type="text/css" media="screen" 
      href="@{'/public/stylesheets/categories.css'}" />   
    </head> 
<h3>Category: Health</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Health's post</a>  
</p> 
<h3>Category: Politics</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}:</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Politic's post</a>  
</p> 
<h3>Category: Entertainment</h3> 
#{ifnot Posts} 
    No posts to view 
#{/ifnot} 
<ul> 
    #{list items:Posts, as: 'Post'} 
    <li>   
     <p>${Post.poster}</p><p>${Post.content}</p>   
    </li> 
    #{/list} 
</ul> 
<p> 
    <a id="addpost" href="#">add new Entertainment's post</a>  
</p> 
<body> 
    <link href="index.css" rel="stylesheet" type="text/css"> 
</body> 
<script type="text/javascript" charset="utf-8"> 
$('#addpost').click(function() { 
    $.post('@{addpost()}', {content: prompt('post content ?')}, function(Post){ 
     $('ul').prepend() 
    }) 
    $.post('@{addpost()}', {poster : prompt('which category ?')}, function(Post){ 
     $('ul').prepend() 
    }) 
}) 
</script>     
      } 


     } 

有谁知道如何解决这个问题?

+0

帖子如何与类别链接? – digiarnie 2012-03-08 23:21:50

+0

实际上他们没有链接,用户决定添加帖子到他想要的类别。 – 2012-03-08 23:28:29

+0

在您的三个类别中,您可以使用相同的项目(帖子)拨打#{list}。这些类别如何区分这些帖子? – digiarnie 2012-03-09 01:22:48

回答

1

阅读完您的其他评论(希望我没有误解)后,您可以在控制器中执行的操作是在您的type列中查找所有唯一类别。然后,对于每种类型(如下面的代码片段categories变量表示),你可以做这样的判断:

Map<String, List<Post>> map = new HashMap<String, List<Post>>(); 
// the categories variable here is the unique types from the Post table 
for (String category : categories) { 
    List<Post> posts = Post.find("type = ?", category).fetch(); 
    map.put(category, posts); 
} 
render(map); 

然后在你看来,你可以去在地图上的按键,将代表所有的类别名称,然后您获得与该关键字相关联的值并遍历该类别的帖子。

上面假设用户可以输入任何他们想要的东西。如果您真的希望他们根据您原始帖子中的视图示例选择健康,政治和娱乐,那么您可能需要在数据库中建模类别。有些选项可能是:

第一个选项

你可以有两个实体:(1)邮政和(2)范畴。你有第一个。第二你需要创建。因此,创建一个类机构是这样的:

@Entity 
public class Category extends Model { 

    @OneToMany(mappedBy = "category", targetEntity = Post.class) 
    public List<Post> posts; 

    ... 
} 

然后在安置自己的实体,你可以有这样的帖子和类别的实体之间的关系:

@Entity 
public class Post extends Model { 

    @ManyToOne 
    @JoinColumn(name = "category_id") 
    public Category category; 

    ... 
} 

这将是很好的,如果用户(或你)可以动态创建类别(或直接在数据库中)以允许用户选择预定义的类别。

第二个选项

如果上面的例子是矫枉过正,因为类是一个简单的词,没有其他属性,如描述,那么你可以只使用类的枚举:

public class Post extends Model { 

    @Enumerated(EnumType.STRING) 
    public Category category; 

    ... 
} 

哪里类别是这样的一个枚举:

public enum Category { 
    HEALTH, 
    ENTERTAINMENT, 
    POLITICS 
} 

再此选项意味着用户将selecti来自预先定义的列表。