gpt4 book ai didi

java - 使用 Play Framework 的博客 Web 应用程序出现逻辑错误

转载 作者:行者123 更新时间:2023-11-30 11:46:44 24 4
gpt4 key购买 nike

我正在使用 play 框架创建一个简单的博客网络应用程序,其中有特定的类别,用户可以发布到他们想要的类别,但问题是当我发布到一个类别时,帖子也会发布到所有类别.

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>
}


}

有人知道怎么解决这个问题吗?

最佳答案

阅读您的其他评论后(希望我没有误解),您可以在 Controller 中做的是在您的 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);

然后在您的 View 中,您可以遍历代表所有类别名称的映射键,然后获取与该键关联的值并迭代该类别的帖子。

以上假设用户可以输入他们想要的任何内容。如果您真的希望他们根据您在原始帖子中的 View 示例仅选择健康、政治和娱乐,那么您可能需要在数据库中对类别进行建模。一些选项可能是:

第一个选项

您可以有两个实体:(1) 帖子和 (2) 类别。第一个你有。第二个你需要创建。所以像这样创建一个类别实体:

@Entity
public class Category extends Model {

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

...
}

然后在您的 Post 实体中,您可以在 Post 和 Category 实体之间建立如下关系:

@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;

...
}

Category 是这样的枚举:

public enum Category {
HEALTH,
ENTERTAINMENT,
POLITICS
}

同样,此选项意味着用户将从预定义的列表中进行选择。

关于java - 使用 Play Framework 的博客 Web 应用程序出现逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com