gpt4 book ai didi

JavaEE : Question about design

转载 作者:行者123 更新时间:2023-11-30 05:07:29 27 4
gpt4 key购买 nike

我有一个 JSF 页面,它将创建一个新的 Comment。我将该页面的托管 bean 设为 RequestScoped 托管 bean。

@ManagedBean(name="PostComment")
@RequestScoped
public class PostComment {
private Comment comment = null;

@ManagedProperty(value="#{A}")
private A a; //A is a ViewScoped Bean

@ManagedProperty(value="#{B}")
private B b; //B is a ViewScoped Bean

@PostConstruct
public void init(){
comment = new Comment();
}

// setters and getters for comment and all the managed property variable
...

public void postComment(String location){
//persist the new comment
...
if(location.equals("A")){
//update the comment list on page A
a.updateListOnA();
}else if(location.equals("B")){
//update the comment list on page B
b.updateListOnB();
}
}
}

从上面的代码中可以看出,2 个 ViewScoped bean A 和 B 都将使用方法 postComment()。并且两者都将组件绑定(bind)到属性 comment,因此两者都将从 bean PostComment 访问 getter getComment()。我现在遇到的问题是,如果我在 A 上,A 的构造函数将加载,但它也会加载 bean B 的构造函数(因为使用 ManagedProperty 进行 bean 注入(inject))。这使我的页面加载速度慢了一倍。解决这个问题的最佳方法是什么?

编辑

我一直在考虑的一种方法是:创建两个不同的RequestedScoped bean,PostACommentPostBComment,然后PostAComment不再需要注入(inject) bean B ,因此不会加载 B 构造函数。现在将实现这个,直到有人能给我指出更好的解决方案

最佳答案

我认为您应该删除 AB bean 并创建一个服务,该服务将根据位置字符串保留注释。 PostComment bean 应调用此方法。

在任何页面上发布评论后,应该刷新该页面,并从数据库中重新加载评论。

编辑:

服务只是一个流行词,它可以是一个 session bean,也可以只是一个简单的java类:

public class CommentService {

public void comment(Comment comment, String location) {
//persist the comment
}

//other methods like loading the comments from db
}

重构后,您的原始 bean 应该如下所示:

@ManagedBean(name="PostComment")
@RequestScoped
public class PostComment {
private Comment comment = null;
private CommentService commentService;

@PostConstruct
public void init(){
comment = new Comment();
commentSetvice = new CommentService();
}

// setters and getters for comment
...

public void postComment(String location){
commentService.comment(comment, location);
}
}

我不知道 A 和 B 包含什么,但这段代码足以添加注释。要显示评论,您应该创建其他 bean,它们从数据库加载评论。

关于JavaEE : Question about design,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4591559/

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