我的 openxava 应用程序在很多地方需要一些会话范围的数据,即用户的当前时间/时区。Openxava 使用 ThreadLocal 变量来保存特定会话的当前登录用户信息(查看 OX 源 org.openxava.util.Users)。它开箱即用。我也遵循同样的方法,但我得到了确定性的结果。有时它会起作用,有时它会给出错误的结果。我不明白它的行为。我在哪里犯错。根据我对 ThreadLocal 变量的理解,这两种情况都不应该起作用。OX 如何保证 Thread 和 Session 之间的一对一映射。请帮助我
问问题
492 次
1 回答
0
OX如何保证Thread和Session之间的一对一映射
不存在这样的映射。当 ThreadLocal 变量附加到线程时,会话对象在整个用户会话中都是活动的。从模型层(实体)使用会话状态不是一个好主意,因为模型可以从其他视图、应用程序、Web 应用程序、批处理等中使用,因此您不能依赖会话状态。
因此,您的第一个选择应该是从控制器层(操作)获取会话数据并将其分配给实体。但是,如果您真的想将会话数据从控制器移动到模型(或应用程序的任何其他部分),您可以使用 ThreadLocal,但您在此变量中设置的值仅在该特定请求中有效,因此您必须从会话移动到每个请求中的 ThreadLocal var。
于 2012-12-26T12:55:13.040 回答