我的自定义组件当前在自定义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 {
...但我无法弄清楚如何将组件处理程序附加到此类。是否有处理程序类的注释?
非常感谢提前!
答案 0 :(得分:2)
我也遇到了这个问题,尝试升级到JSF 2.2。我发现web-facelettaglibary_2_2.xsd有一个bug,与Mojarra 2.2。*实现不匹配。请参阅https://java.net/jira/browse/JAVASERVERFACES-3762。
因此,如果需要为组件定义处理程序类,则仍需要在taglib文件中定义handler-class元素,如您在问题中指定的那样。此外,您必须将xsd架构降级为web-facelettaglibrary_2_0.xsd。
请注意,通过JSF 2.2扩展@FacesComponent并没有消除使用taglib文件的需要。组件处理程序类就是一个例子。根据需要标记标记属性是另一种。
最佳实践仍然要求所有组件在taglib文件中都有条目,以便正确记录它们以获取上下文帮助。由于taglib条目需要tag-name和component-type,因此不应使用@FacesComponent为每个组件定义它们。这将更容易出错。
因此,在您的示例中,您最好的选择是坚持使用:
@FacesComponent(MyComponent.COMPONENT_TYPE)
public class MyComponent {