3.5.13.4. URL 路由生成器
有时候,需要使用合适的 URL 通过 email 发给用户或者展示给用户。生成 URL 最简单的方法就是使用 URL 路由生成器。
URL 路由生成器提供 API 用来生成 URL 链接:
实体实例编辑界面的链接。
带界面 id 或者界面类的界面链接。
带参数的界面链接。
使用 UrlRouting
bean 的 getRouteGenerator()
方法可以获得一个 RouteGenerator
的实例。RouteGenerator
具有下列方法:
getRoute(String screenId)
– 返回指定screenId
的界面路由,示例:String route = urlRouting.getRouteGenerator().getRoute("demo$Customer.browse");
结果:
route = "http://host:port/context/#main/customers"
getRoute(Class<? extends Screen> screenClass)
– 返回指定screenClass
的界面路由,示例:String route = urlRouting.getRouteGenerator().getRoute(CustomerBrowse.class);
结果:
route = "http://host:port/context/#main/customers"
getEditorRoute(Entity entity)
– 返回指定entity
的默认编辑界面的路由,示例:Customer сustomer = customersTable.getSingleSelected();
String route = urlRouting.getRouteGenerator().getEditorRoute(сustomer);
结果:
route == "http://localhost:8080/app/#main/customers/edit?id=5jqtc3pwzx6g6mq1vv5gkyjn0s"
getEditorRoute(Entity entity, Class<? extends Screen> screenClass)
– 生成指定screenClass
和entity
的编辑界面路由。getRoute(Class<? extends Screen> screenClass, Map<String, String> urlParams)
– 生成指定screenClass
和urlParams
的界面路由。
URL 路由生成器示例
假设我们有 Customer
实体,带有标准的界面并注册了路由。 我们在 CustomerBrowse
添加一个按钮用来为选择的实体生成带有某些参数的链接。按钮调用 generateRoute
方法:
@Inject
private UrlRouting urlRouting;
@Inject
private GroupTable<Customer> customersTable;
@Inject
private Dialogs dialogs;
public void generateRoute() {
Customer selectedCustomer = customersTable.getSingleSelected();
if (selectedCustomer != null) {
String routeToSelectedRole = urlRouting.getRouteGenerator()
.getEditorRoute(selectedCustomer, ImmutableMap.of("someParam", "someValue"));
dialogs.createMessageDialog()
.withCaption("Generated route")
.withMessage(routeToSelectedRole)
.withWidth("710")
.show();
}
}
生成的路由结果: