0

我有一个问题,但不知道我应该看什么。我不认为我是第一个有这个问题的人!

它是一个带有 JSF & Co 基本框架的 Java SE 应用程序。

应用程序可以向线程提交评论。我写了一条评论,然后我打开了另一个线程(另一个浏览器选项卡),所以评论发布在新打开的线程中。

我有一个属性为“selectedThread”的 ManagedBean。该错误是由于该属性被较新的属性替换而导致的。我该如何解决这个问题?

我有几个想法,但都产生了同样的问题。

谢谢!


@ManagedBean
@SessionScoped
public class ViewBean {



private Thread selectedThread = new Thread(); //Current opened Threas
private String threadId=""; //ThreadId read out from Database by Id convert to Object
private Comment selectedThreadComment = new Comment(); //Comment to be made

工作/失败步骤:

  1. 打开:thread_detail.xhtml?id=10
  2. 设置的 ThreadId 和选定的行程
  3. 写评论(selectedThreadComment 已设置)
  4. 打开:thread_detail.xhtml?id=11
  5. 提交评论

id 11 而不是 id 10 的注释是可以理解的。

我使用哪个范围无关紧要。必须有一种方法可以根据打开的站点保存评论。

我希望现在我的问题得到更好的定义!

4

1 回答 1

0

听起来好像托管 bean 的范围对于它所拥有的数据来说太宽泛了。症状表明托管 bean 被放置在会话范围内,而它保存的数据特定于单个 HTTP 请求或单个视图。只要浏览器会话建立,会话范围的托管 bean 实例就会存在。它在同一会话中的所有请求/视图中共享。由一个窗口/选项卡发起的任何更改都将反映在同一会话中的另一个窗口/选项卡中。

然后,您应该将 bean 放置在请求或视图范围中,而不是如果它仅包含请求或视图范围的数据。如果您有一些确实应该保存在会话范围内的数据,例如登录用户,那么您应该将当前会话范围的托管 bean 拆分为两个托管 bean,每个托管 bean 都在正确的范围内。会话范围的用于保存表示登录用户的数据,请求/视图范围的用于保存表示提交的表单数据和/或视图状态的数据。您可以使用@ManagedProperty将会话范围一注入到请求/视图范围一中。

也可以看看:

于 2012-08-12T18:06:27.963 回答