3.5.13.2. 路由 API
本章节介绍路由 API 的关键内容。
- 路由注册
-
要为一个界面注册路由,需要在界面控制器添加
@Route
注解,示例:@Route("my-screen") public class MyScreen extends Screen { }
该注解有三个参数:
-
path
(或value
)是路由本身的值; -
parentPrefix
用来做路由压缩(squashing)(参阅 以下)。 -
root
是一个布尔值属性,用来确定一个路由是否是为根界面定义的(比如登录界面或者 主界面)。默认值为false
。如果您创建了一个根界面,实用了非默认
login
的其他路径并且做成了可以不需要登录而通过链接直接访问的界面,您需要为匿名用户启用该界面。否则,当用户输入 URL,比如/app/#your_root_screen
,他们会被重定向到/app/#login
界面。-
在
web-app.properties
文件设置cuba.web.allowAnonymousAccess = true
-
为匿名用户启用该界面:启动应用程序,打开 Administration > Roles,然后创建一个新角色并分配该界面的访问权限。然后为 anonymous 用户分配该角色。
-
如果需要为旧界面定义路由,可以在screens.xml文件中为界面元素添加
route
属性(routeParentPrefix
可选,即对应parentPrefix
参数;rootRoute
对应root
参数),示例:<screen id="myScreen" template="..." route="my-screen" />
-
- 路由压缩
-
此功能目的是为了在打开多个带有相同部分路由的界面时保持 URL 干净易读。举例说明:
对
Order
实体,假设有浏览和编辑界面:@Route("orders") public class OrderBrowser extends StandardLookup<Order> { } @Route("orders/edit") public class OrderEditor extends StandardEditor<Order> { }
在打开浏览界面之后马上打开编辑界面,就能用上 URL 压缩,此时,URL 压缩用来避免 URL 中重复的
orders
路由部分。需要在编辑界面的@Route
注解中用parentPrefix
参数指定路由的重复部分:@Route("orders") public class OrderBrowser extends StandardLookup<Order> { } @Route(value = "orders/edit", parentPrefix = "orders") public class OrderEditor extends StandardEditor<Order> { }
现在,当跟浏览界面在同一标签页打开编辑界面时,地址将像这样:
app/#main/0/orders/edit?id=…
- UI 状态与 URL 的映射
-
使用
UrlRouting
bean 可以根据当前界面和一些参数来更改当前应用程序的 URL。其包含如下方法:-
pushState()
– 更改地址并添加新的浏览器历史记录; -
replaceState()
– 替换地址但不添加新的浏览器历史记录; -
getState()
– 将当前状态作为NavigationState
对象返回。
pushState()/replaceState()
方法接受当前界面控制器和一组参数(map 形式,可选)为输入参数。使用
UrlRouting
的示例,请参阅后面部分。 -