Java jsf与jsf复合组件输出<;html>;标记2次

Java jsf与jsf复合组件输出<;html>;标记2次,java,jsf,glassfish,Java,Jsf,Glassfish,你好 在我的项目中,我有一个JSF自定义组件 文件ProjectRoot/web/resources/foo/bar.html: <?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 xm

你好

在我的项目中,我有一个JSF自定义组件 文件
ProjectRoot/web/resources/foo/bar.html

<?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"      
      xmlns:composite="http://xmlns.jcp.org/jsf/composite">

    <composite:interface>
        <composite:attribute name="title"/>
    </composite:interface>

    <composite:implementation>
        <h1>#{cc.attrs.title}</h1>
        <h:outputText value="foo"/>
    </composite:implementation>

</html>
<?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"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:foo="http://xmlns.jcp.org/jsf/composite/foo"
      >

    <f:view>
        <h:head>
            <title>JSFGantt</title>
        </h:head>
        <h:body>
            <foo:bar title="title"/>
        </h:body>
    </f:view>

</html>
部署我的应用程序后,我在浏览器中打开页面源,我看到以下内容:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2">
            <title>JSFGantt</title></head><body><html xmlns="http://www.w3.org/1999/xhtml">
        <h1>title</h1>foo

</html></body>

甘特
titlefoo
那么,为什么JSF为页面上的每个复合组件输出
标记(本例中为2次)?如何强制JSF每页只显示一个

当然,我的组件更复杂,这只是一个例子。
P.P.S.我使用Netbeans作为IDE,使用Glassfish 4作为应用服务器。我尝试了另一个IDE,但在IntellijIdea中我遇到了一些问题。

名称空间URL不正确。在bar.xhtml中使用:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:composite="http://java.sun.com/jsf/composite">

对于您的index.xhtml

<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:foo="http://java.sun.com/jsf/composite/foo">


我在一个运行在Tomcat上的基于Maven的项目中使用Mojarra 2.2.2尝试了这一点,它在没有额外html标记的情况下运行良好。也许与Glassfish 4捆绑在一起的Mojarra版本中有一个bug。这是文档中说的,但我有一个JSF 2.2项目正在启动和运行,当我将名称空间更改为新名称空间时,我遇到了与海报相同的问题。旧版本仍然可以正常工作。我认为在Mojarra的早期2.2版本中存在bug。谢谢,这对我来说很有用。但是一些消息来源建议使用
http://xmlns.jcp.org/...
取而代之的是
http://java.sun.com/...
。他们说第二个变体不推荐使用。是的,如果可能的话,我会使用新的(从
http://xmlns.jcp
)。旧的可能会在将来被删除(因为现在使用旧的应该不会带来麻烦)。要使新版本正常工作,您应该将Mojarra升级到当前版本。