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?
答案 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
注意:参数的名称可能会在以后从dl
和i
而不是deeplink
和info
更改。