2012-03-08 52 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來自預先定義的列表。