【问题标题】:How ManagedBeans figure out to which facelet or xhtml file they belong?ManagedBeans 如何确定它们属于哪个 facelet 或 xhtml 文件?
【发布时间】:2016-09-03 20:22:06
【问题描述】:

在 JSF 中,我想知道 ManagedBean 如何理解它应该对 xhtml 或 facelet 可用?

【问题讨论】:

  • @BalusC 你是对的。我实际上的意思是他们如何找到彼此,现在我不得不说一个包含表单的 xhtml 文件是如何理解它的,它应该将提交的值 t 提供给其余的 ManagedBeans 之一。
  • @BalusC 请你投票赞成这个问题,因为他们禁止我提问谢谢。

标签: jsf facelets managed-bean


【解决方案1】:

要将组件值和对象绑定到托管 bean 属性或从组件标签引用托管 bean 方法,页面作者应使用表达式语言语法。 当用户向包含 EL 的页面发出请求时,即引用特定的管理 bean,该 bean 将由 JSF 框架实例化(除了具有属性 eager="true" 的托管 bean,这意味着托管 bean 是在请求​​之前创建的首次)。 所以事实是托管 bean 将由 JSF 容器实例化并作为适当 UI 组件的模型,因此 Facelet 将了解 Bean,反之亦然

【讨论】:

  • 但是 jsf 如何知道它应该实例化哪个托管 bean?
  • 您通常使用 Xml 配置或使用注释(可从 JSF 2.0 获得)注册您的托管 bean:@ManagedBean(name = "helloWorld", eager = true) @RequestScoped public class HelloWorld { ... }。当 #{helloWorld} bean 将从 facelet 中引用时,JSF 容器将做一些事情像这样:FacesContext context = FacesContext.getCurrentInstance(); Bean bean = context.getApplication().evaluateExpressionGet(context, "#{helloWorld}", Bean.class);
  • 在您的教程中,您使用注释@ManagedBean 注册bean。 JSF 容器在运行时“在幕后”初始化托管 bean
  • Facelet 通过“Student”键从 FacesContext 中获取它。如果 bean 已经创建,它会按键获取 bean。 FacesContext 将托管 bean 存储为 Map 值。 Key - bean 的名称,value - bean 的实例。
  • 如果 bean 类具有相同的类名,那么从一开始就已经是一个糟糕的设计。问问自己,为什么他们有相同的类名?他们有同样的责任吗?为什么不把它变成一类呢?还是他们有不同的职责?给这些类一个不同的名字。您的 IDE 将创建警告,运行时容器也会创建它们
猜你喜欢
  • 2023-03-05
  • 2022-06-17
  • 2010-09-27
  • 2019-05-18
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多