2016-04-04 10 views
1

スカウトで異なるリンクに異なるフォームを作成する方法があるかどうかを知りたいと思います。現在、すべてのフォームは同じURLリンクで開きます。 たとえば、アプリケーションがhttp://localhost:1808/で実行され、人のフォームを開いた後に、このフォームがリンクhttp://localhost:1808/person?id=300などで開いているとします。スカウトEclipseネオン異なるページ用のURL

これを行う方法はありますか?

答えて

4

ディープリンク機能がリリース/ 6.0.xのブランチで利用可能であり、このように動作します:

あなたはスカウトサーブレットにURLパラメータ「DL」を渡すことができます。 "dl"パラメータには、[ハンドラ名] - [データ]という形式の文字列が含まれています。例:フォーム-123456

Scoutアプリケーションで処理するディープリンクパターンごとに、IDeepLinkHandlerを実装するディープリンクハンドラを登録する必要があります。通常、AbstractDeepLinkHandlerから継承します。コンストラクタでは、ディープリンクパターンに一致する正規表現を指定し、データを正規表現グループとして抽出します。 handleImplメソッドでは、ディープリンクがScoutモデルで何をすべきかを実装します。ディープリンクハンドラは自動的に(Scout)Beanとして登録されます。

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を人間にとってより読みやすくしたり、検索クローラのヒントとして使用したりすることができます。

0

あなたが探しているキーワードは「ディープリンク」です。この機能はまだ開発中であるため、私はそれについて多くのドキュメントを持っていないのは怖いです。最初のバージョンにNeon.M6が追加されました。

目的は、特定のURLを使用してアプリケーションのどこかにジャンプできるようにすることです。

この機能を使用すると、Webブラウザから戻る/進むボタンを操作できます(いくつかの制限があります)。

当社は、ウィジェットのデモアプリケーション内の1つの実装例があります。

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

注:パラメータの名前は、おそらくdliの代わりに、deeplinkinfoから、将来的に変更されます。

関連する問題