4

我在 JSF 页面之间导航时遇到问题。当您单击命令按钮时,我的大部分导航都会发生。命令按钮的操作返回一个字符串。

我的登录页面是我的欢迎页面。这是在我的 web.xml 中:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>faces/pages/index.xhtml</welcome-file>
</welcome-file-list>

在我浏览器的地址栏中,页面显示为:

http://localhost:8080/ui/faces/pages/index.xhtml

一旦发生身份验证,该函数将返回此字符串:

"/ui/faces/pages/home.xhtml"

我要导航到的文件位于:

pages/home.xhtml

但是,当导航应该发生时,我收到此错误:

无法找到匹配的导航案例与 from-view-id '/pages/index.xhtml' 的操作 '#{indexPageController.login()}' 结果为 '/ui/faces/pages/home.xhtml'

谁能帮我理解正确导航到页面所需的相对路径?

4

1 回答 1

5

您不应在导航案例结果中包含上下文路径/uiFacesServlet映射。/faces它应该只表示唯一的视图 ID,它基本上只是物理视图文件的绝对路径,相对于 web 内容根目录或相对于当前视图 ID。

因此,绝对(以 开头/)到 webcontent 根:

/pages/home.xhtml

或相对于当前视图 ID(不以 开头/)(假设您在 中/pages/index.xhtml):

主页.xhtml

请注意,不支持点斜杠./和双点斜杠表示法。../

甚至没有文件扩展名;JSF 将暗示 Facelets 默认后缀,该后缀默认为context 参数.xhtml并可通过context 参数进行配置:javax.faces.DEFAULT_SUFFIX

/页面/主页

毕竟,如果您意识到上下文路径/uiFacesServlet映射在 webapp 内部/faces/*无法控制的,那也是有意义的!如果它们在外部发生更改,那么理论上您需要更改整个代码库中的所有导航案例结果并重建 webapp。这没有任何意义。因此,JSF 已经为您处理好它们。

也可以看看:

于 2012-12-20T00:12:05.837 回答