【问题标题】:How JSF2.0 binds Managed Beans with xhtml?JSF2.0 是如何将 Managed Beans 与 xhtml 绑定的?
【发布时间】:2010-05-09 18:43:21
【问题描述】:

我有一个关于 JSF2.0 如何将托管 Bean 与 xhtml 绑定的非常基本的问题?

说我有 value="#{MymanagedBean.property}" 的 inputtext

如何在 JSF 2 中解析这个 MymanagedBean 引用?

请在回答时考虑以下几点。

  1. 在早期版本中,即使用 JSF 1.2,我们必须在 faces-config.xml 中编写绑定 但是对于 JSF 2,faces-config.xml 不是强制性的

  2. 如果您确实查看 xhtml 页面的源代码.. 您将找不到任何 MymanagedBean 参考。

那它是怎么做的呢?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    在早期版本中,即在 JSF 1.2 中,我们必须在 faces-config.xml 中编写绑定,但在 JSF 2 中,faces-config.xml 不是强制性的

    在 JSF2 中,这是由 @ManagedBean 注释完成的。

    @ManagedBean
    public class MymanagedBean {
        // ...
    }
    

    在 webapp 启动期间,JSF 将扫描所有带有此注解的类的类路径并将它们收集到内存中。

    如果您确实查看 xhtml 页面的源代码.. 您将找不到任何 MymanagedBean 参考。

    没错。 JSF 在服务器机器上运行,生成 (X)HTML 页面,然后网络服务器将其发送到网络浏览器。网络浏览器没有 JSF 或任何其他服务器端语言的概念。网络浏览器仅支持 HTML、CSS 和 JavaScript。

    【讨论】:

    • 谢谢你 BalusC .. 再想想我可以只通过 JavaScript 调用我的托管 bean 方法,而不是 f:ajax 标记.. 只是有点好奇,你可以说 ajax 是如何与 jsf 2 一起工作的.
    • 您可以使用form.submit() 来提交POST 表单,或者更改window.location 以触发新的GET 请求(然后将调用任何请求范围bean 的构造函数)。
    • 嗯。我尝试从 XML 切换到示例应用程序的注释,但它似乎没有找到带有注释的 bean。虽然与 XML 工作得很好。还有其他必须使用的注释吗?
    • Cay Horstmann 提倡使用 CDI 而不是 JSF 来处理这个问题(与 JSF API 分离,这对于测试来说很好)。 weblogs.java.net/blog/cayhorstmann/archive/2010/01/03/…
    【解决方案2】:

    在 webapp 启动期间,JSF 将扫描 所有类的类路径 这个注释并将它们收集在 记忆。

    哇!这肯定会使应用程序启动速度变慢,尤其是如果您的应用程序有数千个类文件。

    【讨论】:

    • 而是对@BalusC 的回答发表评论;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2012-02-20
    • 1970-01-01
    • 2012-11-06
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多