问题标签 [session-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
428 浏览

session - JSF 是否存储了我的助手类,它也在会话中的 ManageBean 中引用?

只是对 JSF 会话管理如何工作的疑问

我有一个托管豆:

所以现在既然 bean 是 sessionScoped,JSF 是否也会在会话中保留我的“userBO”对象?我相信带有 setter 和 getter 的变量很可能存储在会话中。如果我错了,请纠正我。还是我必须将“userBO”声明为瞬态以便将其忽略?

0 投票
0 回答
892 浏览

spring - 如何在 jUnit 中测试会话范围 bean 的破坏?

我有一个会话范围的 bean,我在其中保存了一些用户数据并想编写一个单元测试以确保它保持会话范围。我想在 jUnit 中模拟会话的开始和结束,并比较会话范围 bean 的值。

现在我有单元测试的以下(草稿):

我使用自定义上下文加载器来注册会话范围。

单元测试:

DummyCachedMethods 的相关功能是:

WebUtils.getCurrentUser() 只是从 SecurityContext 中返回当前的 Principal。

但这不起作用,测试在这一行没有通过:

由于方法调用被缓存,它仍然返回 Johnny 而不是 James。

我的缓存相关bean是:

accountSettingsCache 是会话范围的,我想启动一个新会话并销毁它。

如果我取消注释 DirtiesContext 注释,它确实会通过,但我想这不是我想要的。

我错过了什么?

0 投票
1 回答
1009 浏览

jsf - SessionScoped Managed Bean 值未从 Servlet 过滤器更改

我见过类似的问题,但我不认为这是一个转发,因为我可以从 WebFilter 访问 ManagedBean,但奇怪的是更新的属性.... 并没有真正更新。以下是详细信息:

我有一个过滤器(在 Glassfish 3.1.2 上使用 Mojarra 2.1.6,WebFilter 注释):

现在在 Facelet 中,我正在使用这个viewMode

为了完整起见,这里是部分 UserInfoView:

现在发生的事情是由于某种原因(它似乎与 JSESSIONID 相关联)我将有预期的行为:
- 在 GET 请求集中具有“vm = 1”(调用 UserInfoView setViewMode)viewMode 为 1
- Facelet 得到适当的值

然后只需重新启动 Glassfish 并:
- GET 请求中的“vm=1”仍然将 viewMode 设置(调用 UserInfoView setViewMode)为 1
- Facelet 获得 --default** 值(即 0)

我怀疑 RESTORE_VIEW 阶段以某种方式将变量重置为默认值,尽管除了跟踪请求的生命周期之外,我没有任何东西可以支持这个理论......

从 Servlet 过滤器更改 SessionScoped 托管 bean 的变量时,我应该注意什么?我的方法有什么问题吗?

0 投票
1 回答
302 浏览

singleton - EJB-@Singleton 管理查询结果

我应该使用 EJB-@Singleton (javax.ejb.Singleton) 进行统计或监视,还是将统计信息缓存在公共 @SessionScoped-Bean 中会更好?为了澄清我的问题,这里有两种情况:

情景一:

用户开始 Web 会话并进行数据库查询以查看统计信息或数据表。这些查询在其会话中完成。因此,10.000 个用户将进行 10.000 个相等的数据库查询。

场景二:

用户开始 Web 会话并从预初始化的 @Singleton-Bean 重试统计数据或数据表的数据。@Singleton (javax.ejb.Singleton) 在服务器启动 (@Startup) 的开头进行了查询。因此,10.000 个用户可以从 ONE 缓存 (@Singleton) 中读取数据,而不必查询数据库。如果其他人创建/编辑/删除数据,我的 @Singleton-Bean 会触发其缓存数据的刷新。

所以我的问题是:

  • 场景 II 的扩展性是否比场景 I 更好?我猜是。我对吗?
  • 还有其他注意事项或需要考虑的事情吗?
  • 我知道,Stateless-Beans 比@stateful 或@Singleton 扩展得多。我是否应该考虑使用@Stateless-Bean 并使用 JPA/Hibernate 缓存之类的东西缓存查询。
  • 我应该使用@ApplicationScoped (javax.enterprise.context) 而不是@Singleton (javax.ejb.Singleton) 来使用代理吗?会更好吗?
0 投票
3 回答
14529 浏览

jsf - 从请求范围的 bean 访问会话范围的 bean

我正在尝试使用在 IceFaces 页面上找到的模式。(我没有使用 IceFaces,使用 PrimeFaces)

在这种情况下,我有两个豆子:

用户控制器 和用户模型

在我的UserModel上,我有一个UserVO实例(由另一个程序员创建)。在我的UserController我有这个:

如您所见,我创建了一个UserModel的新实例,并使用从返回的内容进行设置,bo.executeLogin()并且它正在工作,我的对象被返回。

为了确保用户已登录,我的UserModel上有一个属性:

我有一个template.xhtml

问题是它不起作用,没有获得loggedIn财产价值。

我的猜测是,以这种方式访问​​我有点创建UserModel的新实例,如果是这样,这是一个问题,因为我的UserController 不是会话范围,只有UserModel

编辑

而不是使用这个loggedIn属性,我知道我可以简单地检查是否设置了UserModel userVo属性,但问题是关于会话范围的 bean,我无法从设置它的UserController访问它,因为它不是范围会话,而且我的 每个页面都将使用template.xhtml 。

0 投票
1 回答
621 浏览

jsf - 转换器不适用于 @ViewScoped

我遇到了转换器的问题。在我的 xhtml 文件中,我有一个带有对象列表的 selectOneMenu,我想在我的 managedBean 中设置一个对象。

如果我的 managedBean 具有@SessionScoped,则 managedbean 中的对象被填充,但如果 managedeban 具有 @ViewScoped,则转换器永远不会使用并且我的对象为空。

如何解决这个问题?

XHTML:

类型转换器:

发送很多

0 投票
1 回答
78 浏览

java - 在视图显示或更改后执行一些代码

我有一个菜单,其中包含指向不同视图的项目。

每个视图都有一个带有附加侦听器的选择组合框。

在该视图中,我使用会话范围的托管 bean。

当我第一次导航到视图时,会在构造 bean 时调用一个方法。当用户从选择框中更改值时,将调用相同的方法。但是重新显示视图时不会调用该方法。

发生这种情况是因为我使用了会话范围的 bean。更好的解决方案是改用视图范围的 bean,但我正在寻找替代方案。有没有办法在视图更改时执行某些代码?

0 投票
2 回答
1041 浏览

jsf - 使用@predestroy 方法在会话结束时执行未决指令?

在会话范围的 bean 中的 Web 应用程序中的用户操作的上下文中存储待处理的执行列表是否安全,然后通过带@Predestroy注释的方法在会话结束时可靠地执行这些操作(我的意思是,在方法的上下文中安全性@predestroy没有被调用 &因此在某些情况下没有执行操作!?)。

0 投票
1 回答
1653 浏览

jsf - JSF 从托管更改为 CDI 时我丢失了会话状态

编辑:这是一个史诗般的手掌情况。SessionScoped 的导入错误。昨晚检查它时太累了,我确定我正在使用企业会话范围导入,而我仍在使用面部会话范围导入。我把它留下来帮助像我这样的笨蛋。:)


这是该项目的早期阶段。在使用托管 bean 实现这一点之后,我将托管 bean 更改为 CDI bean,因为这似乎是关于最佳处理方式的最新共识,但这破坏了以前的工作代码。我终其一生都无法弄清楚为什么。帮助和建议表示赞赏。

快乐的道路(摘要......代码摘录下面的详细信息)

如果用户未登录,则显示登录或注册链接。
如果用户登录显示用户首选项或注销链接。

现在 CDI 的糟糕路径(我不怪 CDI)

如果用户未登录,则显示登录或注册链接。
如果用户登录仍然看到登录或注册链接。(糟糕,糟糕的应用程序)

涉及的对象是

  1. 一个 facelet 菜单面板(带有一个 primefaces 登录对话框......我认为这与它没有任何关系,但为了完整性而包括在内)如果登录或未登录,则带有渲染属性,
  2. 会话范围的用户 bean,
  3. 一个请求范围的身份验证 bean,用于登录和注销用户。

下面列出了使用的对象。实现为 CDI bean。

小面

身份验证 bean

用户 bean

所以这是我在调试模式下观看时的实际用例:

Happy Path(更改为 CDI bean 之前)

1) 用户导航到欢迎页面
2) 查询用户 bean 以查看他们是否已登录(facelet 中的 user.loggedIn)。
3) userbean 检查登录状态。如果他们仍然是访客,则未登录。
4) 他们被标识为访客,因此 isLoggedIn() 返回 false。
5) 显示登录按钮。
6) 用户请求登录
7) 认证bean 开始登录过程:request.login 返回成功
8) authenticationbean 设置用户数据:user.setuserdata(username) 返回成功。
9)身份验证bean loginMethod返回(他们在服务器上记录了userprincipal)

此处的备用(蹩脚)路径分支(快乐路径继续)

10) 菜单重新检查登录状态 (user.loggedIn)
11) userbean 检查适当的状态并确定它们是有效的非访客用户
12) userbean 返回 (true) 他们已登录
13) 菜单显示注销按钮

糟糕的路径(我将这些更改为 CDI bean 后会发生什么)

10) 菜单重新检查登录状态 (user.loggedIn)
11) userbean 检查适当的状态并看到他们是访客 //更新的用户状态似乎在此会话中从该用户中消失了。
12) userbean 返回 (false) 他们没有登录 // 但他们是
13) 菜单显示登录按钮 // 他们无论如何都无法登录,因为服务器已经看到他们登录,在这个会话中 (ServletException: Attempt to re -在用户身份已经存在时登录)。

为什么使用 managedbeans 可以看到 userbean 在会话范围内维护其数据,但使用 cdi bean 却不能?我难住了。如果必须,我会切换回托管 bean,这不是一个大问题,但我想找出我搞砸了。




我在 UserBean 的 init 方法中添加了一些调试代码,看起来好像系统将 SessionScoped UserBean 视为 RequestScoped。那就是它在每次调用时都进行初始化。

如果它真的像 SessionScoped 一样,那么 userInfo 对象就不会每次都为空,并且不会每次都执行“if”语句。但它会在每次调用 UserBean 时执行。所以这是问题的症结所在。事实上,如果它的行为就像在会话范围内,它不会在每次调用时都命中 init 方法,因为它仍然会被初始化。

我没有正确创建会话范围的 bean 吗?看起来是这样,但我不知道如何。如前所述,此代码在定义为 managedbean 时运行良好。

0 投票
1 回答
140 浏览

caching - 如何缓存所有查看用户请求,所以如果再次发出相同的请求,它会从缓存中获取

我有相当大的应用程序,其中包含大量文档和许多不同的视图控件。

为了加快速度并避免不必要的查看和查看搜索请求,我想缓存已经请求的文档或查看条目,因此如果用户再次执行相同的请求,则重复首先在缓存中查找。

我正在考虑编写一个通用函数,将所有请求的 unid 存储在 sessionScope 中,当我的应用程序从文档中检索值而不是查看列值时,我可以将其应用于所有视图集合。

我想这种功能需要跟踪发出的请求并在用户需要更多行时切换回非缓存内容。