gpt4 book ai didi

jsf-2 - 为什么我应该使用 createComponent 而不是自己创建实例?

转载 作者:行者123 更新时间:2023-12-04 11:39:53 25 4
gpt4 key购买 nike

这更像是一个概念性问题。

我必须处理必须创建动态 h:dataTable 的功能.每当我创建一个组件时,我都会做类似的事情:

DataTable table = (DataTable) FacesContext.getCurrentInstance().getApplication()
.createComponent(DataTable.COMPONENT_TYPE);

使用 FacesContext为我创造一切。

但是,我可以简单地这样做:
DataTable table = new DataTable();

我采用第一种方式的原因是我在开发过程中阅读的所有教程和 Material 都是这样做的,但我从来没有得到明确的答案。

第一个比第二个好有实际原因吗?

最佳答案

Application#createComponent()添加了一个额外的抽象层,允许运行时多态性和可插拔性。具体实现由<component>配置进入 faces-config.xml这又可以通过 JAR 提供。这允许在不重写/重新编译代码的情况下更改实现。
这与 JDBC API 的工作方式完全一样:您不这样做 new SomeDriver() ,但你做 Class.forName(someDriverClassName)这允许驱动程序不是编译时依赖项,因此您的 JDBC 代码可以在许多数据库供应商之间移植,而无需重写/重新编译。
但是,如果应用程序仅用于“内部使用”而不打算分发(因此所有代码始终在您的控制之下),那么运行时多态性就没有那么大的优势,并且可能会增加(非常小的)开销。
也可以看看:

  • What is the relationship between component family, component type and renderer type?
  • 关于jsf-2 - 为什么我应该使用 createComponent 而不是自己创建实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610655/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com