我最近开始使用JSF2.0和Facelets,但是遇到了我希望对大多数人来说都是一个简单的答案。当我尝试在<ui:define>
标记内添加任何HTML标记时,出现以下错误:
javax.faces.view.facelets.TagException:/content/home/test.xhtml @ 11,10标记库支持名称空间:http://java.sun.com/jsf/facelets,但未为名称:div定义任何标记
如果我从该部分删除了所有HTML标记,则该页面将正确显示。这是我一直试图开始工作的简单页面:
<!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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:jrc="http://com.comanche.web.components">
<ui:composition template="/templates/masterLayout.xhtml" xmlns="http://java.sun.com/jsf/facelets">
<ui:define name="windowTitle">Home</ui:define>
<ui:define name="content">
<div>I want to add HTML and am having lots of trouble.</div>
</ui:define>
</ui:composition>
</html>
我知道我应该能够在define标记内添加HTML。我需要怎么做才能获得HTML而不会出现任何错误。
最佳答案
您的<ui:composition>
声明使用了错误的全局XML名称空间。您已将http://java.sun.com/jsf/facelets
定义为全局XML名称空间,而应将其分配给ui:
XML名称空间。 <div>
标记在Facelets标记库中不存在(这是异常试图告诉您的内容)。您应该已将http://www.w3.org/1999/xhtml
分配为全局XML名称空间。此外,<!DOCTYPE>
和<html>
仍将被忽略。该文件的唯一内容应为以下内容:
<ui:composition template="/templates/masterLayout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="windowTitle">Home</ui:define>
<ui:define name="content">
<div>I want to add HTML and am having lots of trouble.</div>
</ui:define>
</ui:composition>
在同一文件中
<ui:composition>
之前或之后的任何内容都是没有必要的。也可以看看:
How to include another XHTML in XHTML using JSF 2.0 Facelets?