URL 路由生成器

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

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

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

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

    String route = urlRouting.getRouteGenerator().getRoute("uiex1_Customer.browse");

    结果将会是 http://host:port/#main/customers

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

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

    结果将会是 http://host:port/#main/customers

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

    Customer e = customerField.getValue();
    
    String route = urlRouting.getRouteGenerator().getEditorRoute(e);

    结果将会是 http://host:port/#main/customers/edit?id=5jqtc3pwzx6g6mq1vv5gkyjn0s

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

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

示例

假设我们有 Customer 实体,带有标准的界面并注册了路由。我们在浏览界面添加一个按钮为选择的实体生成编辑界面的链接:

@Autowired
protected UrlRouting urlRouting;

@Autowired
protected Dialogs dialogs;

@Subscribe("getLinkButton")
protected 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();
    }
}

生成的路由结果:

customer route