我想在 JSF 中创建一个自定义组件并且已经创建了它。现在我想为我在 XHTML 文件中使用的自定义标签创建属性并将它们设为强制性。 我创建了一个从 UIOutput 类扩展的组件 MyJSFComponent。我如何强制执行某些属性?
最佳答案
您不会在 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()
的类(class)会抛出 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");
}
}
这会对属性的存在进行真正的运行时检查。
关于jsf自定义组件声明强制属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21179134/