Java Facelet模板呈现两个HTML标记

Java Facelet模板呈现两个HTML标记,java,jsf,facelets,Java,Jsf,Facelets,我正在创建我的第一个facelets/JSF应用程序。在我的第一页中,我添加了一个facelet模板: 在此处插入标题 这是我的模板页面: 在此处插入标题 纳格罗维克 但是,当我在web浏览器中查看页面源时,我看到: 在此处插入标题 在此处插入标题 纳格罗维克 当我使用时,为什么JSF会创建一个body和其他HTML标记两次 更新后,我的代码将显示主页: 在此处插入标题 模板内容: aaaaaaaaa 这是源代码视图: 在此处插入标题 在此处插入标题 aaaaaaaaa

我正在创建我的第一个facelets/JSF应用程序。在我的第一页中,我添加了一个facelet模板:


在此处插入标题
这是我的模板页面:


在此处插入标题
纳格罗维克
但是,当我在web浏览器中查看页面源时,我看到:


在此处插入标题
在此处插入标题
纳格罗维克
当我使用
时,为什么JSF会创建一个body和其他HTML标记两次


更新后,我的代码将显示主页:


在此处插入标题
模板内容:


aaaaaaaaa
这是源代码视图:


在此处插入标题
在此处插入标题
aaaaaaaaa

基本上,您使用模板的方式是错误的。你基本上是在用它们,而不是用它应该怎么做。您称之为“我的模板页面”的页面应通过其在浏览器中的URL打开,而不是您称之为“facelet模板”的页面。将来防止这种错误的最好方法是将您在
(和
)中指定的页面存储在
/WEB-INF
文件夹中,这样它们就永远不会被意外(或黑客)直接打开

以下是一个适用于您的案例的启动示例:

/WEB-INF/templates/template.xhtml


默认标题
/WEB-INF/templates/top.xhtml


top的一些默认内容

/page.xhtml


这里有新的页面标题
纳格罗维克
现在,您应该在浏览器中导航到
/page.xhtml
(因此不是模板文件)

另见:

@BalucC我将模板文件移到了/WEB-INF,但我的浏览器源代码视图仍然是一样的。我使用的是EclipseJuno中Mojara项目中的jsf.jar。也许这是个问题?在我提出这个问题之前,我已经在谷歌搜索了很长时间,但没有人有类似的问题。我认为我的代码只是为了引起这个错误。这个问题是由你自己添加到代码中的其他东西引起的。你应该从我在回答中给出的文件开始。保存并运行它,然后在此基础上进一步构建。我的评论写得太快了-您的示例不起作用:(我创建了一个新项目。在WEB-INF\templates中我放置了template.xhtml和top.xhtml,在WebContent中我放置了page.xhtml。当我运行page.xhtml时,我从top或template内容中看不到任何内容。@BalusC我非常非常感谢您!您的回答和建议帮助我了解如何使用facelets。再次感谢:)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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">

 <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Insert title here</title></head>
 <body>

 <?xml version="1.0" encoding="ISO-8859-1" ?>     
 <!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">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Insert title here</title>

</head>
 <body>
    <h2>aaaaaaaaa</h2>
 </body> 
</html>
</body> 
</html>