Java openxava将会话范围内的数据保留在Threadlocal变量中

Java openxava将会话范围内的数据保留在Threadlocal变量中,java,openxava,Java,Openxava,我的openxava应用程序需要在很多地方(即用户的当前时区)使用一些会话范围的数据。Openxava使用ThreadLocal变量保存特定会话的当前登录用户信息(请检查OX source org.Openxava.util.Users)。它是开箱即用的。我也遵循同样的方法,但得到了确定的结果。有时它会起作用,有时它会给出错误的结果。我不理解它的行为。我哪里出错了。从我对ThreadLocal变量的理解来看,这两种情况都不应该起作用。OX如何保证线程和会话之间的一对一映射。请帮帮我 OX如何保证

我的openxava应用程序需要在很多地方(即用户的当前时区)使用一些会话范围的数据。Openxava使用ThreadLocal变量保存特定会话的当前登录用户信息(请检查OX source org.Openxava.util.Users)。它是开箱即用的。我也遵循同样的方法,但得到了确定的结果。有时它会起作用,有时它会给出错误的结果。我不理解它的行为。我哪里出错了。从我对ThreadLocal变量的理解来看,这两种情况都不应该起作用。OX如何保证线程和会话之间的一对一映射。请帮帮我

OX如何保证线程和会话之间的一对一映射

这种映射并不存在。当ThreadLocal变量附加到线程时,会话对象在整个用户会话中处于活动状态。 从模型层(实体)使用会话状态不是一个好主意,因为模型可以从其他视图、应用程序、web应用程序、批处理过程等使用,所以不能依赖于会话状态


因此,第一个选项应该是从控制器层(操作)获取会话数据,并将其分配给实体。但是,如果确实要将会话数据从控制器移动到模型(或应用程序的任何其他部分),可以使用ThreadLocal,但在此变量中设置的值仅在该特定请求中有效,因此您必须在每个请求中从会话移动到ThreadLocal var

>从模型层(实体)使用会话状态不是一个好主意。我不需要它在模型中,它在行动中。如何在java中存储会话范围的数据?Hi steave55,以及您操作中的usa@Inject(JSR-330)。看看: