【问题标题】:Custom JSF Components. When use UIComponentELTag自定义 JSF 组件。使用 UIComponentELTag 时
【发布时间】:2012-06-26 16:12:15
【问题描述】:

要在 JSF 中创建自定义组件,需要创建一个扩展 UIComponent 的类并在 JSF 中注册其组件类型,例如使用 @FacesComponent。要在 facelets 页面中使用该组件及其属性,必须将组件与 facelets 标记链接到一个称为标记描述文件的特殊文件中:

<tag>
    <tag-name>test</tag-name>
    <component>
        <component-type>local.test.component_type</component-type>
    </component>
</tag>

好的,但我对标签类(和标签处理程序)的使用感到困惑。查看 mojarra 源代码,所有 html 基本组件都使用扩展 UIComponentELTag 的组件标记类在标记库描述文件中声明。例如:

<tag>
   <name>commandButton</name>
    <tag-class>
        com.sun.faces.taglib.html_basic.CommandButtonTag
    </tag-class>
</tag>

查看UIComponentELTag的JSF api:

UIComponentELTag 对其超类进行了专门化,以允许从 EL API 表达式中获取其值的属性。

此标签设计用于 Faces 1.2 版和 JSP 2.1 版容器。

那么问题是,什么时候我应该使用扩展 UIComponentELTag 的类来链接标签属性与自定义组件,而不是通过链接组件? 如果我不使用标记类,那么我的组件不能在 JSP 页面或以前的 JSF 版本中使用,只能在 JSF facelets 中使用?

【问题讨论】:

    标签: java jsf jsf-2 custom-component


    【解决方案1】:

    如果我不使用标记类,那么我的组件不能在 JSP 页面或以前的 JSF 版本中使用,只能在 JSF facelets 中使用?

    没错。如果您不为 JSF 2.0 定制组件使用标记类,那么您的 JSF 2.0 定制组件与 JSP 不兼容,也不与 JSF 1.2 或更早版本兼容。 JSP 自 JSF 2.0 以来已被弃用,因此除非您绝对需要支持 JSP 和/或 JSF 1.2,否则您根本不需要创建标记类。这使您免于不必要的样板代码。一些 JSF 2.0 组件库(如 PrimeFaces)甚至根本不支持 JSP。

    标签处理程序是另一回事。标记处理程序与 UI 组件的标记类不同。要了解什么是标记处理程序,请查看 JSF 核心 (&lt;f:xxx&gt;) 标记库。所有标准的 JSF 标记处理程序都在其中。它们在 JSF 2.0 中仍然有用。使用标记处理程序,您可以控制 JSF 视图的构建方式(使用 UI 组件,您可以控制 JSF 视图的呈现方式)。

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 2010-10-13
      • 2011-06-30
      • 2011-03-17
      • 2016-08-01
      • 1970-01-01
      • 2013-02-07
      • 2015-11-14
      • 1970-01-01
      相关资源
      最近更新 更多