2016-11-15 8 views
0

私は現在、openhiftで私のvaadinアプリケーションをホストしています。私のメインのウェブサイトは、ログインボタンがクリックされるとvaadinアプリにリダイレクトされます。ユーザーが最初に見られるのはログインページですリダイレクトVaadin App

私のウェブサイトには2つのボタンがあり、無料トライアルボタンとログインボタンがあり、私はvaadinアプリ、ログインクラス、無料トライアルクラスの2つのクラスを持っています。

私のvaadinアプリのログインクラスにログインボタンをリダイレクトさせるにはどうしたらいいですか?無料のトライアルボタンは私のvaadinアプリの無料トライアルクラスにリダイレクトされますか?あなたのリクエストにパラメータを渡すと、このパラメータに応じてUIを提供するUIプロバイダを使用することができ

@Theme("mytheme") 
@Widgetset("com.example.myapp.MyAppWidgetset") 
@PreserveOnRefresh 
public class MyUI extends UI { 

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true) 
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) 
    public static class MyUIServlet extends VaadinServlet { 
    } 

    @Override 
    protected void init(VaadinRequest vaadinRequest) { 
     login(); 
    } 
+0

代わりにここでナビゲータを使用する傾向があります。あなたは少しあなたのコードをリファクタリングする必要があります。 –

+0

@Chris Mありがとうございました!私の状況のた​​めにこれをどのように実装するかについての洞察はありますか?私はドキュメントを読んだが、私はそれを本当に理解していない。 www.trial.mywebsite.comをtrialUIクラスにリダイレクトするにはどうすればいいですか www.login.mywebsite.comをLoginUIクラスにリダイレクトしますか? – user3702643

答えて

0

これは次のように、それが現在に見えるものです。

hereを参照してください。

例:

public class DifferentFeaturesForDifferentClients extends UIProvider { 

    @Override 
    public Class<? extends UI> getUIClass(UIClassSelectionEvent event) { 
     if ("trial".equalsIgnoreCase(event.getRequest().getParameter("app-type"))) { 
      return TrialUI.class; 
     } else { 
      return LognUI.class; 
     } 
    } 
} 

のweb.xml:

<servlet> 
    <servlet-name>My Vaadin App</servlet-name> 
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> 
    <init-param> 
     <description>Vaadin UI</description> 
     <param-name>UIProvider</param-name> 
     <param-value>com.example.myexampleproject.DifferentFeaturesForDifferentClients</param-value> 
    </init-param> 
</servlet> 

そしてメインのウェブサイトのhtmlコードで:クリスMが言ったように

<form> 
    <input type="submit" name="app-type" value="Trial" formaction="/your/vaadin/url" formmethod="post"> 
    <input type="submit" name="app-type" value="Login" formaction="/your/vaadin/url" formmethod="post"> 

    <!-- Alternative using button tag (better for customization, but no IE < 9) --> 
    <button name="app-type" value="trial" type="submit">Trial</button> 
    <button name="app-type" value="login" type="submit">Login</button> 
</form> 
+0

これは理にかなっているようですが、私の要求にどのようにパラメータを渡しますか? – user3702643

+0

ボタンを使用して送信されたPOSTパラメータを渡すメインWebサイトのフォームを使用して、フォームをvaadinアプリケーションのURLにターゲットすることができます。 – JDC

+0

それに応じて答えを – JDC

0

あなたがナビゲーターを使用することができ、イベントドリブンアーキテクチャを実装しようとすることもできます。私はVaadinを使ってGoogle Guavaでプロジェクトを実装しました。

興味がある場合は、Google Guavaの使い方の例があります。あなた以下 http://codingjunkie.net/guava-eventbus/

私の実装のいくつかのコードの断片を見つけることができます。

// Using guava 
final Button signin = new Button(
        Lang.getMessage("login.signin"), 
        eventClick -> {BarsEventBus.post(new UserLoginRequestedEvent(
          username.getValue(), password.getValue()));}); 


//Using Navigator, I also used spring here, so the registration view is a Spring View 
final Button register = new Button(
        Lang.getMessage("login.registration"), 
        clickEvent -> {getUI().getNavigator().navigateTo(ViewToken.REGISTRO);} 
        ); 


@UIScope 
@SpringView(name = ViewToken.REGISTRO) 
public class RegistrationView extends VerticalLayout implements View {...} 

vaadinデモ・アプリケーションのコードを確認してください。そのコードは、それをどのように扱うかの例を持っています。ここをクリックしてください: https://github.com/vaadin/dashboard-demo

0

私はあなたが何をすべきか理解しました。あなたはこれを非常に簡単に行うことができます。 VaadinRequestをVaadinServletRequestにキャストする必要があります。 VaadinServletRequestではなくVaadinRequestを渡す理由は、アプリケーションをポートレットとしてもデプロイできることです。その場合は、代わりにVaadinPortletRequestにキャストする必要があります。次に、ユーザーが提供するserverNameを使用できます。

@Override 
    protected void init(VaadinRequest vaadinRequest) { 
     VaadinServletRequest req = (VaadinServletRequest) vaadinRequest; 
     String serverName = req.getServerName(); 
     if (serverName.equals("www.login.mywebsite.com")) 
     { 
      login(); 
     } 
     else 
     { 
      trial(); 
     } 
    } 
+0

これはほとんど私が望むことですが、私はopenshiftからlogin.mywebsite.comに自分のアプリケーションをリダイレクトしています。あなたが提供したコードは、私にopensshiftのためのURLを与えているのであって、login.mywebsite.comではない。あなたはこれのための回避策がありますか? – user3702643

関連する問題