我最近开始使用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?

10-05 17:42