在 JSF 2.1 上创建自定义标签库
Creating custom taglib on JSF 2.1
我正在尝试创建自定义标签库以在某些项目中使用它。
当我尝试在项目中使用它时,它运行良好。
如果我将 WAR 放在其他项目中,NetBeans 会检测它的命名空间和值,但是在呈现页面时,它会抛出:
"Warning: This page calls for XML namespace http://test.com/test
declared with prefix te but no taglibrary exists for that namespace."
该代码基于我找到的一些博客。
这是 "taglib project" 结构:
WEB-INF
|-- componentes
| `-- outputText.xhtml
|-- test.taglib.xhtml
`-- web.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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-app_3_0.xsd">
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/test.taglib.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
test.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib version="2.0" 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">
<namespace>http://test.com/test</namespace>
<tag>
<tag-name>outputText</tag-name>
<source>componentes/outputText.xhtml</source>
<attribute>
<description>Valor</description>
<name>value</name>
</attribute>
<attribute>
<description>Establece negrita</description>
<name>negrita</name>
<type>java.lang.Boolean</type>
</attribute>
</tag>
</facelet-taglib>
outputText.xhtml "hello world" 例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<h:outputText value="#{value}" style="#{negrita ? 'font-weight: bold' : '' }"/>
</ui:composition>
</html>
使用 taglib(在 "taglib project" 和 "taglib tester project" 上是相同的):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:te="http://test.com/test"
>
<h:head>
<title>Pruebas componentes</title>
</h:head>
<h:body>
<te:outputText value="Prueba te" negrita="true"/>
</h:body>
</html>
有什么想法吗?
应将项目创建为“网络片段”项目,其中包含 .taglib.xml
文件以及项目 /META-INF
文件夹中的 faces-config.xml
网络资源。
CommonWebProject
|-- META-INF
| |-- tags
| | |-- foo.xhtml
| | |-- bar.xhtml
| | :
| |
| |-- faces-config.xml
| |-- test.taglib.xml
| |-- web-fragment.xml
| `-- MANIFEST.MF
:
当在 WAR 的 /WEB-INF/lib
中放置 JAR 这样的项目时,WAR 的 web.xml
中的整个 javax.faces.FACELETS_LIBRARIES
条目是 不需要.
另请参阅:
- Packaging Facelets files (templates, includes, composites) in a JAR
我正在尝试创建自定义标签库以在某些项目中使用它。 当我尝试在项目中使用它时,它运行良好。 如果我将 WAR 放在其他项目中,NetBeans 会检测它的命名空间和值,但是在呈现页面时,它会抛出:
"Warning: This page calls for XML namespace http://test.com/test declared with prefix te but no taglibrary exists for that namespace."
该代码基于我找到的一些博客。 这是 "taglib project" 结构:
WEB-INF
|-- componentes
| `-- outputText.xhtml
|-- test.taglib.xhtml
`-- web.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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-app_3_0.xsd">
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/test.taglib.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
test.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib version="2.0" 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">
<namespace>http://test.com/test</namespace>
<tag>
<tag-name>outputText</tag-name>
<source>componentes/outputText.xhtml</source>
<attribute>
<description>Valor</description>
<name>value</name>
</attribute>
<attribute>
<description>Establece negrita</description>
<name>negrita</name>
<type>java.lang.Boolean</type>
</attribute>
</tag>
</facelet-taglib>
outputText.xhtml "hello world" 例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<h:outputText value="#{value}" style="#{negrita ? 'font-weight: bold' : '' }"/>
</ui:composition>
</html>
使用 taglib(在 "taglib project" 和 "taglib tester project" 上是相同的):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:te="http://test.com/test"
>
<h:head>
<title>Pruebas componentes</title>
</h:head>
<h:body>
<te:outputText value="Prueba te" negrita="true"/>
</h:body>
</html>
有什么想法吗?
应将项目创建为“网络片段”项目,其中包含 .taglib.xml
文件以及项目 /META-INF
文件夹中的 faces-config.xml
网络资源。
CommonWebProject
|-- META-INF
| |-- tags
| | |-- foo.xhtml
| | |-- bar.xhtml
| | :
| |
| |-- faces-config.xml
| |-- test.taglib.xml
| |-- web-fragment.xml
| `-- MANIFEST.MF
:
当在 WAR 的 /WEB-INF/lib
中放置 JAR 这样的项目时,WAR 的 web.xml
中的整个 javax.faces.FACELETS_LIBRARIES
条目是 不需要.
另请参阅:
- Packaging Facelets files (templates, includes, composites) in a JAR