当前位置: 首页 > 知识库问答 >
问题:

使用子类重写会话范围的托管Bean

陶星渊
2023-03-14

在JSF1.2应用程序中,我是否可以覆盖使用子类返回的会话范围的托管Bean?

阶级结构

我有一个会话范围的托管Bean,Main ViewMB,及其子类,限制的ViewMB

面配置。xml

<managed-bean>
  <managed-bean-name>mainViewMB</managed-bean-name>
  <managed-bean-class>com.example.MainViewMB</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

问题陈述

EL表达式#{mainViewMB}返回mainViewMB的实例。

我想用RestrictedViewMB的实例重新绑定名称{mainViewMB},以便EL表达式{mainViewMB}为会话的其余部分返回子类的实例。

有没有办法实现我的目标?

激励范例

Main ViewMB处理应用程序主页后面的GUI逻辑。当用户从专用登录页面进入应用程序时,我需要提供一个受限的、简化的主页视图。在子类中重写Main ViewMB的一些属性似乎是显而易见的解决方案。

共有1个答案

暴辰龙
2023-03-14

在你可以/需要做的时候手动做。

externalContext.getSessionMap().put("mainViewMB", new RestrictedViewMB());

这将一个名为main ViewMB的新实例放入会话范围,有效地使其成为会话范围内的托管bean。

您只需要考虑到托管属性和@PostConstruct/@PreDestroy不是以这种方式调用的,您还必须手动执行。

 类似资料:
  • 我有一个会话范围的CDI托管bean: 在某个流之后,我需要从会话中删除这个bean,对于该流,我使用了以下代码,如下面的答案所示: 但是,它不起作用,仍然留在会话中。 我是否遗漏了什么?

  • 我编写了一个会话范围的托管bean,用于在domino xpages应用程序中缓存sesion用户特定的信息,如下代码所示: 然后,我在faces配置中声明了它,使其成为会话范围的bean: 在测试bean时,我通过#{NBUser.fullUserName}使用它,它并不总是返回当前domino http会话上下文的用户,例如,我首先由用户“user1”登录并注销,然后由user2登录,bean

  • 我用的是Mojarra 2.1。29并具有会话范围的JSF托管bean 和一个Spring的豆子: 事实上,我需要JSF中的某种自定义范围,即在满足条件时从头开始重新创建bean。有可能以某种方式做吗?通过重新创建,我的意思是在第一次创建时清理它的所有属性。

  • 我们希望通过集成SpringCDIJSFSpringSecurity来创建web应用程序。我们已经配置了上面所有的框架,我们认为一切正常,但是在实现注销功能的过程中,我们意识到JSF的ManagedBeans并不是在应该创建的时候创建的。例如:我们已经在会话作用域中创建了托管bean,我们希望在注销并使会话无效后删除该bean。 不幸的是,在重新登录之后,托管bean实例仍然是活的(每个用户的信息

  • HttpSession 对象必须被限定在应用(或 servlet 上下文)级别。底层的机制,如使用 cookie 建立会话,不同的上下文可以是相同,但所引用的对象,包括该对象中的属性,决不能在容器上下文之间共享。 用一个例子来说明该要求: 如果 servlet 使用 RequestDispatcher 来调用另一个 Web 应用的 servlet,任何创建的会话和被调用 servlet 所见的必须

  • 问题内容: 我不确定我在做什么是错误的,还是只是错过了某个地方的注释或配置项。情况如下: 我有一个JSF应用程序,其会话范围的bean名为。在创建时,此Bean 注入了一个应用程序范围的Bean引用(类型)。首次创建会话时,此方法正常。依赖项注入是通过文件中的元素完成的,如下所示: 因为序列化时让我的对象包含对象没有意义,所以我在对象中将引用标记为瞬态: 直到停止Web应用程序(在我的Tomcat