Jek*_*iya 1 migration jsf jsp facelets taglib
我有一个在.tld文件中注册的自定义JSF组件.当我声明如下时,它在JSP中工作正常:
<%@taglib uri="http://example.com/ui" prefix="ex"%>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试声明如下时,它在Facelets中不起作用:
<html xmlns:ex="http://example.com/ui">
Run Code Online (Sandbox Code Playgroud)
如何在Facelets中使用我的自定义JSF组件?
JSP和Facelets是完全不同的视图技术.JSP是基于Servlet的,而Facelets是基于XML的.您不能重复使用另一个的标签/标签库.什么*.tld是JSP文件,是*.taglib.xml对Facelets文件.
这是一个关于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>
Run Code Online (Sandbox Code Playgroud)
如果您有一个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>
Run Code Online (Sandbox Code Playgroud)
如果您选择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">
Run Code Online (Sandbox Code Playgroud)
值得注意的是,自2009年以来,JSP被弃用为JSF的视图技术.因此,如果您打算构建一个新的自定义组件库,那么使它与JSP兼容将完全浪费精力,因为没有一个理智的JSF开发人员会使用它.而且,几乎所有JSF 2.x组件库都不支持JSP(不再).
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |