java - 自定义 JSF 组件。使用 UIComponentELTag 时

标签 java jsf jsf-2 custom-component

要在 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 specializes its superclass to allow for properties that take their values from EL API expressions.

This tag is designed for use with Faces version 1.2 and JSP version 2.1 containers.

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

最佳答案

If I don't use a tag class, then my comonent cannot be used in JSP pages or previous JSF versions and only will work in JSF facelets?

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

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

关于java - 自定义 JSF 组件。使用 UIComponentELTag 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188770/

相关文章:

java - 使用 JavaFX 的动画看起来不稳定

java - 快速排序算法显示错误的输出

java - HashMap 第一个键为空

java - 执行期间从命令行读取

javascript - widgetVar 在 p :repeat for printing Charts 中无法正常工作

jsf - 错误提示我需要使用 f :metadata even though I do

java - 添加/删除项目时的 Richfaces pickList ajax 事件

validation - 我应该在 JSF 1.2/2.0/2.1 中使用什么 DTD 来验证我的配置 XML?

jsf-2 - primefaces 可编辑数据表中的 EnumConverter

java - JSF2 : Using EL in navigation rules. 超时重定向?