jsf自定义组件声明强制属性

时间:2014-01-17 06:17:01

标签: jsf custom-component

我想在JSF中创建一个自定义组件并且已经创建了它。现在我想为我在XHTML文件中使用的自定义标记创建属性并将它们作为必需元素。 我创建了一个从UIOutput类扩展的组件MyJSFComponent。我如何强制要求某些属性?

1 个答案:

答案 0 :(得分:2)

您不是在UIComponent方面,而是在.taglib.xmlTagHandler方面。

.taglib.xml文件中,您只需在属性中添加<required>true</required>条目。

<attribute>
    <name>foo</name>
    <required>true</required>
    <type>java.lang.String</type>
</attribute>

然而,您是否依赖于工具(编辑器)是否会导致错误。 JSF / Facelets即不会在运行时检查它。例如,Eclipse会在编辑器中自动填充标记时自动内联属性,但是之后可以将其删除,并且它可以正常运行。

更加可靠的强制执行是使用ComponentHandler类,该类提供getRequiredAttribute()方法,该方法在缺席时会抛出TagException。然后,您可以在.taglib.xml文件中注册此处理程序,如下所示:

<component>
    <component-type>com.example.SomeComponent</component-type>
    <handler-class>com.example.SomeComponentHandler</handler-class>
</component>

因此处理程序类基本上如下所示:

public class SomeComponentHandler extends ComponentHandler {

    public SomeComponentHandler(ComponentConfig config) {
        super(config);
        getRequiredAttribute("foo");
    }

}

这会对属性的存在进行实际的运行时检查。