jsf - 在 .taglib.xml 中注册自定义组件后,Netbeans 中不会自动完成属性

标签 jsf netbeans jsf-2 custom-component taglib

我为 SelectOneRadio 创建了一个自定义组件,并将其注册到 xyz.taglib.xml 中,到目前为止它可以正常工作。唯一的问题是我的 NetBeans 无法在自动完成中看到我的标签属性。例如,如果我的自定义组件中有 layout="pageDirection" ,那么它会正确渲染,但是当我(Ctrl + space)时,我看不到 layout ...属性。以下是我在 WEB-INF/faces-config.xml 中注册自定义组件的方法,我有

<component>
    <component-type>com.xyz.om.ui.component.SelectOneRadio</component-type>
    <component-class>
        com.xyz.om.ui.component.SelectOneRadio
    </component-class>
    <component-extension>
        <component-family>com.xyz.om.ui.component.SelectOneRadio</component-family>
        <renderer-type>com.xyz.om.ui.renderer.SelectOneRadioRenderer</renderer-type>
    </component-extension>
</component>
<render-kit>
    <renderer>
        <component-family>com.xyz.om.ui.component.SelectOneRadio</component-family>
        <renderer-type>com.xyz.om.ui.renderer.SelectOneRadioRenderer</renderer-type>
        <renderer-class>
            com.xyz.om.ui.renderer.SelectOneRadioRenderer
        </renderer-class>    
    </renderer>
</render-kit>

在我的WEB-INF/xyz.taglib.xml中,我有

<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
            version="2.0">
<namespace>http://example.com/ui</namespace>
<tag>
    <tag-name>selectOneRadio</tag-name>
    <component>
        <component-type>com.xyz.om.ui.component.SelectOneRadio</component-type>
        <renderer-type>com.xyz.om.ui.renderer.SelectOneRadioRenderer</renderer-type>            
    </component>
</tag>
</facelet-taglib>

所以我在web.xml中注册xyz.taglib.xml如下

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/xyz.taglib.xml</param-value>
</context-param>

完成此步骤后,如果我在自定义组件上按 Ctrl + 空格 (Netbeans),我只能看到 class、id、parent 、rendered、rendererType、transient。所以我尝试在 WEB-INF 下创建一个 xyz.tld,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>xyz</short-name>
<uri>http://example.com/ui</uri>

<tag>       
    <name>selectOneRadio</name>
    <tag-class>com.xyz.om.ui.tag.SelectOneRadioTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <description>
            xyz description
        </description>
        <name>name</name>
        <required>false</required>
        <deferred-value>
            <type>java.lang.String</type>
        </deferred-value>         

    </attribute>
</tag>
</taglib>

但是当我写出标签时,name 属性仍然没有显示在 netbeans 中。 我想我的问题是如何让 netbeans 自动完成我的自定义组件的属性,因为一切正常,但没有自动完成是一种痛苦

最佳答案

属性根据 .taglib.xml 自动完成文件。您需要在 <tag> 中注册每个单独的属性。元素。

<tag>
    <tag-name>selectOneRadio</tag-name>
    <component>
        <component-type>com.xyz.om.ui.component.SelectOneRadio</component-type>
        <renderer-type>com.xyz.om.ui.renderer.SelectOneRadioRenderer</renderer-type>            
    </component>
    <attribute>
        <name>id</name>
        <required>false</required>
        <type>java.lang.String</type>
    </attribute>
    <attribute>
        <name>binding</name>
        <required>false</required>
        <type>javax.faces.component.UIComponent</type>
    </attribute>
    <attribute>
        <name>rendered</name>
        <required>false</required>
        <type>java.lang.Boolean</type>
    </attribute>
    <!-- Etc.. -->
</tag>

.tld仅当您计划除了 Facelets 之外还支持 JSP 时,这才是强制性的。请注意,JSF 2.0 本身不支持 JSP,它将以 JSF 1.2 后备模式运行。

关于jsf - 在 .taglib.xml 中注册自定义组件后,Netbeans 中不会自动完成属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403434/

相关文章:

java - jsf 2.0 自定义组件/标签不是复合的

Primefaces 树表选择事件

java - JSF Primefaces : how to update selectOneMenu(in form1) from dialogBox in form 2?

css - 从 css 通过 id 访问 JSF 元素

jsf - Primefaces - 无法在数据表之外找到带有标识符的组件

带有 Swing UI 的 Java 线程

Javax.enterprise.context.SessionsScoped 的行为类似于 SpringContainer 中的 Singleton,以 JSF 作为前端

java - p :submenu clickable

c - 使用 scanf 时获取无限运行的程序

java - 使用 Netbeans 检查 jDownloader