Java jsf与jsf复合组件输出<;html>;标记2次
你好 在我的项目中,我有一个JSF自定义组件 文件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
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升级到当前版本。