我有一个问题,但不知道我应该看到什么。我不认为我是第一个遇到这个问题的人!
这是一个带有JSF和Java的Java SE应用程序。 Co,基本框架。
应用程序可以向线程提交注释。我写了一个评论,然后我打开另一个线程(另一个Browser-Tab),以便在新打开的帖子中发布评论。
我有一个属性为“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
工作/失败步骤:
对于id 11而不是id 10,可以理解为持续存在注释。
使用哪个Scope并不重要。必须有一种方法可以根据打开的网站保存评论。
我希望现在我的问题更明确了!
答案 0 :(得分:0)
听起来好像托管bean的范围对于它所拥有的数据而言过于宽泛。这些症状表明托管bean已放置在会话范围内,而其保存的数据特定于单个HTTP请求或单个视图。只要建立了浏览器会话,会话范围的托管bean实例就会存在。它在同一会话中的所有请求/视图中共享。由一个窗口/选项卡启动的任何更改都将反映在同一会话中的另一个窗口/选项卡中。
如果bean仅包含请求或视图范围数据,那么您应该将bean放在请求或视图范围中。如果您有某些数据,这些数据肯定会保留在会话范围内,例如:登录用户,然后您应该将当前会话范围的托管bean拆分为两个托管bean,每个托管bean都在正确的范围内。然后,使用作用域的会话来保存表示登录用户的数据,然后使用请求/视图作用域来保存表示提交的表单数据和/或视图状态的数据。您可以使用@ManagedProperty
将会话作用域注入到请求/视图作用域中。