3.5.13. URL 历史及导航

CUBA URL 历史和导航功能可以提供浏览器历史记录和导航功能,这对于很多 web 应用程序来说是最基本的功能。此功能包含以下部分:

  • 历史 – 支持浏览器的 后退(Back) 按钮。但是不支持 前进(Forward) 按钮,因为没法重现打开界面的所有条件。

  • 路由以及导航 – 注册和处理应用程序界面的路由。

  • 路由 API – 一组方法,用来在 URL 中反映界面的当前状态。

fragment 是 URL 里“#”后面的部分,这部分用来做 路由 值。

比如,下面这个 URL:

host:port/app/#main/42/orders/edit?id=17

这个 URL 中,fragment 是 main/42/orders/edit?id=17,由以下部分组成:

  • main – 根界面的路由(主窗口);

  • 42 – 一个 状态标记(state mark),导航机制内部使用;

  • orders/edit – 嵌套的界面路由;

  • ?id=17 – 参数部分;

所有打开的界面都会将它们的路由映射到当前的 URL。比如,当用户浏览界面打开并且是当前界面的时候,应用程序的 URL 可能是这样:

  1. http://localhost:8080/app/#main/0/users

如果界面没有已经注册的路由,那么只会在 URL fragment 中添加状态标记。示例:

  1. http://localhost:8080/app/#main/42

对于编辑界面,如果界面有注册的路由,则会在地址后面以参数形式加上被编辑实体的 id。示例:

  1. http://localhost:8080/app/#main/1/users/edit?id=27zy3tj6f47p2e3m4w58vdca9y

UUID 类型的标识符会使用 Base32 Crockford 进行加密,其它类型则不会加密。

当没有用户登录的时候,又出于某些原因需要界面路由,则会使用重定向(redirect)参数。假设在地址栏中输入 app/#main/orders。当应用程序加载并且显示登录界面之后,地址会变成:app/#login?redirectTo=orders。在成功登录之后,才会打开 orders 路由对应的界面。

如果请求的路由不存在,应用程序会显示一个带有”Not Found”标题的空界面。

URL 历史和导航功能默认开启。设置应用程序属性cuba.web.urlHandlingModeNONE 可以关闭此功能,或者设置为 BACK_ONLY 回退到处理浏览器返回按钮的旧机制。