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

标签 jsf custom-component

我想在 JSF 中创建一个自定义组件并且已经创建了它。现在我想为我在 XHTML 文件中使用的自定义标签创建属性并将它们设为强制性。 我创建了一个从 UIOutput 类扩展的组件 MyJSFComponent。我如何强制执行某些属性?

最佳答案

您不会在 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() 的类(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/

相关文章:

session - 在 JSF 中登录、注销和存储 session 属性的最佳方法

Java Swing 自定义控件

delphi - 组件初始化 - 运行时与设计时

android - 同一 Android 复合组件的多个实例

apache-flex - 在自定义 Flex 组件中绘制叠加层

primefaces - JSF 状态保存和自定义组件与动态添加的子项

java - jsf 托管 bean 中的 JSF inputText 和 session

jsf - 使用 FacesServlet 解析 Javascript 中的 EL 变量

jsf - JSF 中的拦截器

mysql - 如何使用 netbeans 管理数据源?