3.5.13.4. URL 路由生成器

有时候,需要使用合适的 URL 通过 email 发给用户或者展示给用户。生成 URL 最简单的方法就是使用 URL 路由生成器。

URL 路由生成器提供 API 用来生成 URL 链接:

  • 实体实例编辑界面的链接。

  • 带界面 id 或者界面类的界面链接。

  • 带参数的界面链接。

使用 UrlRouting bean 的 getRouteGenerator() 方法可以获得一个 RouteGenerator 的实例。RouteGenerator 具有下列方法:

  • getRoute(String screenId) – 返回指定 screenId 的界面路由,示例:

    1. String route = urlRouting.getRouteGenerator().getRoute("demo$Customer.browse");

    结果:

    route = "http://host:port/context/#main/customers"

  • getRoute(Class<? extends Screen> screenClass) – 返回指定 screenClass 的界面路由,示例:

    1. String route = urlRouting.getRouteGenerator().getRoute(CustomerBrowse.class);

    结果:

    route = "http://host:port/context/#main/customers"

  • getEditorRoute(Entity entity) – 返回指定 entity 的默认编辑界面的路由,示例:

    1. Customer сustomer = customersTable.getSingleSelected();
    2. String route = urlRouting.getRouteGenerator().getEditorRouteustomer);

    结果:

    route == "http://localhost:8080/app/#main/customers/edit?id=5jqtc3pwzx6g6mq1vv5gkyjn0s"

  • getEditorRoute(Entity entity, Class<? extends Screen> screenClass) – 生成指定 screenClassentity 的编辑界面路由。

  • getRoute(Class<? extends Screen> screenClass, Map<String, String> urlParams) – 生成指定 screenClassurlParams 的界面路由。

URL 路由生成器示例

假设我们有 Customer 实体,带有标准的界面并注册了路由。 我们在 CustomerBrowse 添加一个按钮用来为选择的实体生成带有某些参数的链接。按钮调用 generateRoute 方法:

  1. @Inject
  2. private UrlRouting urlRouting;
  3. @Inject
  4. private GroupTable<Customer> customersTable;
  5. @Inject
  6. private Dialogs dialogs;
  7. public void generateRoute() {
  8. Customer selectedCustomer = customersTable.getSingleSelected();
  9. if (selectedCustomer != null) {
  10. String routeToSelectedRole = urlRouting.getRouteGenerator()
  11. .getEditorRoute(selectedCustomer, ImmutableMap.of("someParam", "someValue"));
  12. dialogs.createMessageDialog()
  13. .withCaption("Generated route")
  14. .withMessage(routeToSelectedRole)
  15. .withWidth("710")
  16. .show();
  17. }
  18. }

生成的路由结果:

url generate route