Tha*_*ham 2 jsf netbeans taglib custom-component jsf-2
我为它创建了一个自定义组件SelectOneRadio,并将其注册xyz.taglib.xml到目前为止它的工作原理.唯一的问题是我的NetBeans无法在自动完成中看到我的标记属性.例如,如果我layout="pageDirection"在我的自定义组件中,那么它会正确渲染,但是当我(Ctrl +空格)我看不到时layout,value...属性.这里是我在我注册我的自定义组件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>
Run Code Online (Sandbox Code Playgroud)
在我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>
Run Code Online (Sandbox Code Playgroud)
所以我注册xyz.taglib.xml在web.xml如下
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/xyz.taglib.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
完成此步骤后,如果我在自定义组件上按Ctrl +空格(Netbeans),我只能看到class, id, parent , rendered, rendererType, transient.所以我尝试xyz.tld在WEB-INF下创建一个这样的
<?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>
Run Code Online (Sandbox Code Playgroud)
但是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>
Run Code Online (Sandbox Code Playgroud)
.tld当您计划在Facelets旁边支持JSP时,这只是强制性的.请注意,JSF 2.0本身不支持JSP,它将以JSF 1.2回退方式运行.