在我的index.xhtml上,我有正确显示的Java Server Face组件并使用托管bean。但是,如果我链接到任何其他页面甚至是具有完全相同代码的页面,那么这些页面将不会显示这些组件,只显示文本。
假设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://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:inputText value="#{user.name}"/>
<h:commandButton action="#{user.submit}" value="Submit" />
</h:form>
</h:body>
</html>
如果我添加到任何其他页面的链接(即使是具有相同代码的页面),也不会为它们显示JSF组件。这是因为其他页面可能无法“看到”托管bean吗?或其他什么?
感谢您的帮助。
答案 0 :(得分:3)
看起来您要调用的页面不会被Faces Servlet处理。
在应用程序的web.xml
中,您可以定义将由此servlet处理的服务器请求的url-pattern。默认情况下,这通常为/faces/*
。这意味着您调用的链接必须包含此模式才能由Faces Servlet处理。
如果使用Netbeans创建项目,映射通常如下所示:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
因此,请尝试使用包含此网址格式的链接或使用相对链接。
如果您使用h:link
代替a:href
,则会自动添加网址格式:
<h:link value="My other page" outcome="otherpage" />
将呈现为:
<a href="/yourAppName/faces/otherpage.xhtml">My other page</a>