jsf - 通过注释声明组件处理程序

标签 jsf custom-component jsf-2.2 taglib

我的自定义组件目前在自定义 taglib.xml 文件中声明,其中一些需要处理程序,例如:

<tag>
    <tag-name>mycomponent</tag-name>
    <component>
        <component-type>com.so.MyComponent</component-type>
        <renderer-type>com.so.MyComponentRenderer</renderer-type>
        <handler-class>com.so.MyComponentHandler</handler-class>
    </component>
</tag>

现在我想受益于新的 JSF 2.2 基于注解的声明,写作:

@FacesComponent(value = MyComponent.COMPONENT_TYPE, tagName = "mycomponent", createTag = true)
public class MyComponent {

...但我不知道如何将组件处理程序附加到此类。处理程序类是否有注释?

非常感谢!

最佳答案

我在尝试升级到 JSF 2.2 时也遇到了这个问题。我发现 web-facelettaglibary_2_2.xsd 有一个错误,与 Mojarra 2.2.* 实现不匹配。参见 https://java.net/jira/browse/JAVASERVERFACES-3762 .

因此,如果您需要为组件定义处理程序类,您仍然需要在标签库文件中定义处理程序类元素,正如您在问题中指定的那样。此外,您必须将 xsd 架构降级为 web-facelettaglibrary_2_0.xsd。

请注意,通过 JSF 2.2 对 @FacesComponent 的扩展并没有消除使用 taglib 文件的需要。组件处理程序类就是一个例子。根据需要标记标签属性是另一回事。

最佳实践仍然要求所有组件在 taglib 文件中都有条目,以便正确记录它们以获得上下文帮助。由于 taglib 条目需要标记名称和组件类型,因此您不应使用 @FacesComponent 为每个组件定义它们。这将更容易出错。

因此,在您的示例中,最好的选择是坚持使用:

@FacesComponent(MyComponent.COMPONENT_TYPE)
public class MyComponent {

关于jsf - 通过注释声明组件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054993/

相关文章:

jsf - Primefaces 验证细胞编辑

java - PrimeFaces 的 DataTable 即时行选择未在浏览器中正确呈现

java - 如何确定自定义组件的正确 UI 实现

delphi - 如何在对象检查器中对组件的属性进行分组?

java - JSF EJB3 到 Spring 3,BigInteger 始终为 0 而不是 null

java - 如何获取jsf组件的内部内容?

delphi - 如何在 TComboBox 后代上键入时实现查找

jsf-2.2 - CDI ViewScope & PrettyFaces : Multiple calls to @PostConstruct (JSF 2. 2)

css - 100% 高度的 Primefaces 布局

jsf - 将 JSF 2.0 项目更新到 2.2 的手册