我有一个简单的 Web 应用程序,其中包含 Facelet index.xhtml
<?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://xmlns.jcp.org/jsf/html">
<body> <h:inputText id="text"/> </body>
</html>
我感兴趣编译器解析时详细发生的情况 <h:inputText id=text"/>
。我希望它能帮助我实现JSF
。我假设操作顺序是:
- 编译器将通过
xmlns:h="http://xmlns.jcp.org/jsf/html"
进入命名空间并在这种情况下尝试查找标签 inputText。 - 如果标签成立,编译器运行由例如
<handler-class>com.example.SomeHandler</handler-class>
定义的标签处理程序在标签<tag></tag>
内. - 通过hadler编译器发现的标签
UIComponent
类和渲染器类,对应于该标签。
我认为,我对解析过程的理解有误,因为渲染器类注册到 component family
...请解释一下正确的操作顺序。
最佳答案
你比你知道的更接近答案。 Facelets 使用与 JSP 类似的 taglib,它们在 .taglib.xml 文件中声明,看起来与此类似
<facelet-taglib>
<namespace>http://www.mycompany.com/jsf</namespace>
<tag>
<tag-name>bar</tag-name>
<component>
<component-type>javax.faces.Data</component-type>
<renderer-type>com.mycompany.Bar</renderer-type>
</component>
</tag>
</facelet-taglib>
taglib 文件中的命名空间元素引用您将在 Facelets 文档(在 xmlns 属性中)中使用的 URL 来引用此 taglib,同时各个标记元素定义 taglib 中的各个标记。
在上述标签库的情况下,您将使用像这样定义的“bar”标签
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="http://www.mycompany.com/jsf">
<body><m:bar/></body>
</html>
通过执行此操作,facelets 将查找与命名空间“http://www.mycompany.com/jsf”关联的 taglib,找到“bar”的标签定义,然后使用定义中发现的 UIComponent 来呈现该标签所需的输出。
关于java - Facelet 解析或标记 <h :inputText id ="text"/> is parsing 时发生的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441264/