【问题标题】:Unable to find matching navigation case with from-view-id '/pages/index.xhtml'无法使用 from-view-id '/pages/index.xhtml' 找到匹配的导航案例
【发布时间】:2016-07-21 15:02:06
【问题描述】:

我在 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' for action '#{indexPageController.login()}' 结果为 '/ui/faces/pages/home.xhtml'

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

【问题讨论】:

  • 在更正您帖子中的一些拼写错误时,我注意到返回的字符串文件扩展名 (xhtm) 与错误消息 (xhtml) 中的不匹配。也许你应该确保你没有一个简单的错字问题。否则,不知道。我猜你部署了一个名为“ui”的网络应用程序。
  • @AlainPannetier 谢谢,当我写下这个问题时,这只是一种类型。真正的字符串是 xhtml。再次感谢

标签: jsf view navigation


【解决方案1】:

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

所以,绝对(以/ 开头)到网络内容根目录:

/pages/home.xhtml

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

home.xhtml

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

甚至没有文件扩展名; JSF 将通过 javax.faces.DEFAULT_SUFFIX 上下文参数暗示 Facelets 默认后缀,默认为 .xhtml 并且是 configureable

/pages/home
首页

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

另见:

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多