Scout Eclipse Neon different url for for different pages

时间:2016-04-04 17:31:10

标签: url eclipse-scout

I would like to know if there is a way in Scout to make different forms on different links. Right now all the forms open on same url links. For example if application runs on http://localhost:1808/ that after opening person form, this form open in link http://localhost:1808/person?id=300 for example.

Is there a way to do this?

2 个答案:

答案 0 :(得分:4)

深度链接功能在发行版/ 6.0.x分支上可用,其工作方式如下:

您可以传递一个网址参数" dl"到Scout servlet。 " dl" -parameter包含以下格式的字符串: [处理程序名称] - [数据] 。示例: form-123456

对于要在Scout应用程序中处理的每个深层链接模式,您必须注册一个实现IDeepLinkHandler的深层链接处理程序,并且通常继承自AbstractDeepLinkHandler。在构造函数中,指定与深层链接模式匹配的正则表达式,并将数据提取为正则表达式组。在handleImpl方法中,您可以实现深度链接在Scout模型中应该执行的任何操作。深层链接处理程序将自动注册为(Scout)Bean。

以下是使用深层链接打开Scout表单的一些示例代码:

public class FormDeepLinkHandler extends AbstractDeepLinkHandler {

  private static final String HANDLER_NAME = "form";

  public FormDeepLinkHandler() {
    super(defaultPattern(HANDLER_NAME, "\\d+"));
  }

  @Override
  public void handleImpl(Matcher matcher) throws DeepLinkException {
    String formId = matcher.group(1);
    IForm form = getFormById(formId);
    form.start();
  }

  private IForm getFormById(String formId) throws DeepLinkException {
    if ("300".equals(formId)) {
      return new ScoutInfoForm();
    }
    // throw a DeepLinkException when resource requested by deep-link does not exist
    throw new DeepLinkException("Form not found");
  }

  public BrowserHistoryEntry createBrowserHistoryEntry(IForm form) {
    return DeepLinkUriBuilder.createRelative()
        .parameterInfo(form.getTitle())
        .parameterPath(toDeepLinkPath(getFormId(form)))
        .createBrowserHistoryEntry();
  }

  private String getFormId(IForm form) {
    // TODO: return an ID for different forms, or you could use form.getFormId();
    return "300";
  }

  @Override
  public String getName() {
    return HANDLER_NAME;
  }

}

可选的createBrowserHistoryEntry(IForm)创建一个在浏览器历史记录中使用的条目,这意味着它将更改浏览器地址栏中的URL。它还可以使用Scout应用程序中的历史后退/前进按钮。为此,您可以在表单中执行此操作:

  @Override
  protected void execInitForm() {
    BrowserHistoryEntry entry = BEANS.get(FormDeepLinkHandler.class).createBrowserHistoryEntry(this);
    ClientSessionProvider.currentSession().getDesktop().setBrowserHistoryEntry(entry);
  }

有了这个,您最终可以通过打开URL来启动表单:
http://foo.com/?dl=form-300&i=Title-of-the-form

注意:" i"参数完全是可选的。您可以使用它来使URL对人类更具可读性或作为搜索爬虫的提示。

答案 1 :(得分:0)

您要查找的关键字是" Deep-Links"。我担心我们没有很多关于它的文档,因为该功能仍处于开发阶段。第一个版本添加了Neon.M6。

目标是能够使用特定的URL跳转到应用程序中的某个位置。

此功能还可以使用Web浏览器的后退/前进按钮(有一些限制)。

我们的Widgets演示应用程序中有一个实现示例:

http://<URL to the APP>/?deeplink=widget-svgfield

注意:参数的名称可能会在以后从dli而不是deeplinkinfo更改。