使用Facelets时遇到导航问题。
我在/WEB-INF
中有我的主模板:
<h:body>
<div id="container">
<div id="header">
<ui:insert name="header">Header</ui:insert>
</div>
<div id="navigation">
<a href="ram.xhtml">RAM</a>
<a href="mobo.xhtml">Motherboard</a>
<a href="video.xhtml">Video Card</a>
</div>
<div id="content">
<ui:insert name ="content"></ui:insert>
</div>
</div>
</h:body>
然后是2个看起来完全相同的模板客户端,index.xhtml
和ram.xhtml
:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./WEB-INF/layoutTemplate.xhtml">
<ui:define name="header">
some text
</ui:define>
<ui:define name="content">
some content
</ui:define>
</ui:composition>
如果将这些页面中的任何一个设置为web.xml
中的欢迎页面,则可以使用CSS和所有内容正确呈现它们。但是如果我尝试使用我得到的链接从一个页面导航到另一个页面
此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。
任何提示都将不胜感激。
答案 0 :(得分:6)
这意味着请求网址(如浏览器地址栏中显示的)与FacesServlet
中定义的web.xml
的网址格式不匹配。
那些链接
<a href="ram.xhtml">RAM</a>
<a href="mobo.xhtml">Motherboard</a>
<a href="video.xhtml">Video Card</a>
希望FacesServlet
映射到*.xhtml
。但是,如果它被映射到例如*.jsf
并且由于某种原因而不能将其更改为*.xhtml
(我强烈推荐它),那么您需要修复链接
<a href="ram.jsf">RAM</a>
<a href="mobo.jsf">Motherboard</a>
<a href="video.jsf">Video Card</a>
或者,更好的是,只需使用<h:link>
即可。它会隐式附加正确的上下文路径和FacesServlet
映射:
<h:link value="RAM" outcome="ram" />
<h:link value="Motherboard" outcome="mobo" />
<h:link value="Video Card" outcome="video" />