如何创建自定义 Facelets 标签?

Posted

技术标签:

【中文标题】如何创建自定义 Facelets 标签?【英文标题】:How to create a custom Facelets tag? 【发布时间】:2013-01-22 23:34:50 【问题描述】:

我正在使用 JSF 2.0。我使用标记文件创建了自定义 JSTL 标记,并且在 JSP 中运行良好。但我也想在 Facelets 中使用自定义 JSTL 标记。是否可以在 Facelets 中创建标签文件?

【问题讨论】:

可能重复:***.com/questions/7726523/… 谢谢,我也检查了这个问题,但是我创建了在 jsp 中运行良好的自定义 jstl 标签,但是当我通过给出“xmlns:ct="ve.customTag" 命名空间在面孔中使用该标签时那么它在脸上不起作用。请告诉我如何在 jsf 中使用我的自定义 jstl 标签 【参考方案1】:

“自定义 JSTL 标记”确实没有意义。这个词完全没有意义。 JSTL已经本身就是一个标签库。请仔细阅读our JSTL wiki page 的介绍性段落,了解JSTL 的真正含义。您可能实际上是指“Custom JSP tags”。当然,它们不能在 Facelets 中工作,因为这是一种与 JSP 完全不同的视图技术,实际上是已弃用的 JSP 的继承者。

好吧,“自定义 JSP 标记”的类比是“自定义 Facelets 标记”,或者更常见的是“Facelets 标记文件”。这很简单,你可以遵循与包含文件相同的语法。

/WEB-INF/tags/some.xhtml:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
    Hello World
    ...
    <ui:insert /> <!-- This inserts tag body, if necessary. -->
</ui:composition>

并在/WEB-INF/example.taglib.xml注册如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/jsf/facelets</namespace>
    <tag>
        <tag-name>some</tag-name>
        <source>tags/some.xhtml</source>
    </tag>
</facelet-taglib>

依次在/WEB-INF/web.xml注册如下:

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

(请注意,当 *.taglib.xml 文件位于 /WEB-INF/lib 中 JAR 的 /META-INF 文件夹中时,无需在 web.xml 中注册)

最后在你的模板中使用它,如下所示:

<html ... xmlns:my="http://example.com/jsf/facelets">
...
<my:some />

另见:

When to use <ui:include>, tag files, composite components and/or custom components? Structure for multiple JSF projects with shared code

【讨论】:

以上是关于如何创建自定义 Facelets 标签?的主要内容,如果未能解决你的问题,请参考以下文章

将 EL 方法表达式作为自定义 Facelets 标记文件的属性传递

如何创建自定义标签栏...在标签栏中添加自定义图像(无需 xib 更改)

Swift 和 Xcode - 如何创建自定义标签栏图标

如何在 python 中使用格式化创建自定义 Kivy 标签类?

Django 自定义模板标签不返回任何值

MonoTouch 中的自定义标签栏项目