我想在JSF中创建一个自定义组件并且已经创建了它。现在我想为我在XHTML文件中使用的自定义标记创建属性并将它们作为必需元素。 我创建了一个从UIOutput类扩展的组件MyJSFComponent。我如何强制要求某些属性?
答案 0 :(得分:2)
您不是在UIComponent
方面,而是在.taglib.xml
或TagHandler
方面。
在.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");
}
}
这会对属性的存在进行实际的运行时检查。