哪个 JSF 版本(impl)支持 UI 自定义组件注释替换 XML 标签库?

问题描述 投票:0回答:1

对于自定义的JSF组件Foo,需要添加如下taglib.xml。哪个 JSF impl (mojarra) 版本支持注释而不是 XML?

taglib.xml

<facelet-taglib ...>        

      <namespace>http://xmlns.example.com/</namespace>

    <tag>
        <description>foo</description>
        <tag-name>foo</tag-name>
        <component>
            <component-type>com.example.component.HtmlFoo</component-type>
            <renderer-type>com.example.component.Foo</renderer-type>
        </component>                         
    </tag>      
</facelet-taglib>

更新

@FacesComponent(createTag=true, namespace="http://xmlns.example.com/", tagName="foo")
public class HtmlFoo extends UIComponent {

    public HtmlFoo() {
        setRendererType("com.example.component.Foo");
    }

    public String getFamily() {
        return "com.example.component.data";
    }

    // ...
}


public class HtmlFooTag extends UIComponentELTag {
  
  @Override
  public String getComponentType() {
    return "com.example.component.HtmlFoo";
  }

  @Override
  public String getRendererType() {
    return "com.example.component.Foo";
  }

  // ...
}


@FacesRenderer(
        componentFamily="com.example.component.data",
        rendererType="com.example.component.Foo")
public class HtmlFooRenderer extends Renderer {

   //...
}

使用标签:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:g="http://xmlns.example.com/">
     // ...
     <g:foo .../>
</html>

错误:

<g:foo> Tag Library supports namespace: http://xmlns.example.com/, but no tag was defined for name: foo

HtmlFooTag 没有注解。它是如何连接到组件 HtmlFoo 的?

jsf annotations mojarra
1个回答
1
投票

自 JSF 2.2 起就支持它,无论实现如何(尽管如此,任何实现都必须遵守规范)。自 JSF 2.2 以来,JSF 2.0 中引入的

@FacesComponent
注释获得了一个
createTag
属性,您可以将其设置为
true
以跳过 XML 样板文件,以及可选的
namespace
tagName
属性。您可以在组件的构造函数中设置默认渲染器。

换句话说:

@FacesComponent(createTag=true, namespace="http://xmlns.example.com/", tagName="foo")
public class HtmlFoo extends UIComponent {

    public HtmlFoo() {
        setRendererType("com.example.component.Foo");
    }

    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.