【问题标题】:Custom JSF component declared in .tld file works in JSP but not in Facelets.tld 文件中声明的自定义 JSF 组件在 JSP 中有效,但在 Facelets 中无效
【发布时间】:2015-04-15 04:43:53
【问题描述】:

我有一个在.tld 文件中注册的自定义JSF 组件。当我将其声明如下时,它在 JSP 中运行良好:

<%@taglib uri="http://example.com/ui" prefix="ex"%>

但是,当我尝试如下声明时,它在 Facelets 中不起作用:

<html xmlns:ex="http://example.com/ui">

如何在 Facelets 中使用我的自定义 JSF 组件?

【问题讨论】:

    标签: jsp jsf migration facelets taglib


    【解决方案1】:

    JSP 和 Facelets 是完全不同的视图技术。 JSP 是基于 Servlet 的,而 Facelets 是基于 XML 的。您不能在另一个上重用一个标签/标签库。 JSP 的 *.tld 文件是什么,Facelets 的 *.taglib.xml 文件。

    这是一个关于 JSF 2.0 的 Facelets taglib 文件的启动示例:

    <?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/ui</namespace>
    
        <tag>
            <tag-name>foo</tag-name>
            <component>
                <component-type>com.example.Foo</component-type>
            </component>
        </tag>
    </facelet-taglib>
    

    如果您有一个 JAR 文件风格的组件库,只需将其放在其 /META-INF 文件夹中即可。它将被自动发现。但是,如果您在 WAR 本身中耦合了这些自定义组件,则将其放入 /WEB-INF 文件夹并通过以下上下文参数将其注册到 web.xml

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

    如果您打算选择 JSF 2.2 作为最低要求,请更新 taglib 的根声明,如下所示:

    <facelet-taglib
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd"
        version="2.2">
    

    另见:

    应该注意的是,自 2009 年起,JSP 作为 JSF 的视图技术已被弃用。因此,如果您打算构建一个新的自定义组件库,使其与 JSP 兼容将完全是浪费精力,因为没有一个理智的 JSF 开发人员会使用它。此外,几乎所有 JSF 2.x 组件库(不再支持)都不支持 JSP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多