美好的一天!
在我的项目中,我有一个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>
然后我在另一个JSF页面中使用我的组件。
档案ProjectRoot/web/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"
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>
那么为什么JSF为页面上的每个复合组件输出<html>
标签(在这种情况下为2次)?如何强制JSF每页只显示一个<html>
?
P.S。当然我的组件更复杂,这只是一个例子。 P.P.S.我使用Netbeans作为IDE和Glassfish 4作为Application Server。我尝试了另一个IDE,但在IntellijIdea中我遇到了一些问题。