<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<title><ui:define name="title">Page 2</ui:define></title>
<ui:composition template="template/common/commonLayout.xhtml">
<ui:define name="content">
This is the content of Page 2 page<br/>
<h:form prependId="false">
<h:commandButton id="goToIndex" value="Go to Index" action="index" />
</h:form>
<a href="index.xhtml">Index</a>
</ui:define>
</ui:composition>
</h:body>
</html>
我有两个相同的facelets页面:index.xhtml和page2.xhtml,它们相互链接。我还有一个模板文件。 index和page2之间的代码没有区别,除了标题中的页面名称,内容文本和commandButton值。
当我点击表单实现的goToIndex按钮导航到index.xhtml时,一切都按预期工作:它转到index.xhtml。但是,当我点击[a href]链接实现的链接导航到index.xhtml时,它会转到index.xhtml,但似乎忽略了页面的所有模板设置,包括任何表单标记。呈现的唯一内容是限制在“内容”定义中的文本,但没有任何css格式。
这件事情都发生了。 “index - &gt; page2”和“pag2 - &gt; index”
知道为什么会这样吗?
答案 0 :(得分:4)
由<a href ...>
调用的页面未由faces servlet处理,因此未正确翻译且未包含css / js。
查看 web.xml 并检查面部servlet的映射方式。在那里你可能会找到类似的东西:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
您可以将模式更改为:
<url-pattern>*.xhtml</url-pattern>
然后所有带有xhtml前缀的文件将由faces servlet处理。但是,如果在项目中将xhtml前缀用于facelets之外的其他目的,这可能会导致问题。
另一种方法是使用h:link
代替a:href
:
<h:link value="Index" outcome="index" >
其中outcome属性采用不包含.xhtml的目标页面。