3.5.13.4. URL 路由生成器

有时候,需要获取一些应用程序界面的 URL 通过 email 发给用户或者展示给用户。生成 URL 最简单的方法就是使用 URL 路由生成器。

URL 路由生成器提供 API 用来生成链接:实体实例编辑界面、带界面 id 或者界面类的界面。连接还能带 URL 参数,将界面内部的状态反映到 URL 上,以便将来使用。

使用 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 实体,带有标准的界面并注册了路由。 我们在浏览界面添加一个按钮用来为选择的实体生成编辑界面的链接:

@Inject
private UrlRouting urlRouting;

@Inject
private GroupTable<Customer> customersTable;

@Inject
private Dialogs dialogs;

@Subscribe("getLinkButton")
public void onGetLinkButtonClick(Button.ClickEvent event) {
    Customer selectedCustomer = customersTable.getSingleSelected();
    if (selectedCustomer != null) {
        String routeToSelectedRole = urlRouting.getRouteGenerator()
                .getEditorRoute(selectedCustomer);

        dialogs.createMessageDialog()
                .withCaption("Generated route")
                .withMessage(routeToSelectedRole)
                .withWidth("710")
                .show();
    }
}

生成的路由结果:

url generate route