gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:54:04 26 4
gpt4 key购买 nike

我的自定义组件目前在自定义 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/

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