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) – 生成指定 screenClassentity 的编辑界面路由。

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

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();
      }
}

生成的路由结果:

url generate route