Redirect 重定向Vaadin应用程序
我目前正在openshift上托管我的vaadin应用程序。单击登录按钮后,我的主网站将重定向到vaadin应用程序。用户看到的第一件事是登录页面 我的网站上有两个按钮,一个免费试用按钮和一个登录按钮,我的vaadin应用程序中有两个不同的类,一个登录类和一个免费试用类 如何使登录按钮重定向到我的vaadin应用程序的登录类,使免费试用按钮重定向到我的vaadin应用程序的免费试用类 这就是它目前的样子:Redirect 重定向Vaadin应用程序,redirect,login,vaadin,trial,Redirect,Login,Vaadin,Trial,我目前正在openshift上托管我的vaadin应用程序。单击登录按钮后,我的主网站将重定向到vaadin应用程序。用户看到的第一件事是登录页面 我的网站上有两个按钮,一个免费试用按钮和一个登录按钮,我的vaadin应用程序中有两个不同的类,一个登录类和一个免费试用类 如何使登录按钮重定向到我的vaadin应用程序的登录类,使免费试用按钮重定向到我的vaadin应用程序的免费试用类 这就是它目前的样子: @Theme("mytheme") @Widgetset("com.example.mya
@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();
}
您可以向请求传递一个参数,并根据此参数使用UI提供程序为UI提供服务 看 例如:
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;
}
}
}
不同客户端的公共类差异功能扩展了UIProvider{
@凌驾
public Class您可以向请求传递一个参数,并根据此参数使用UI提供程序为UI提供服务
看
例如:
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;
}
}
}
不同客户端的公共类差异功能扩展了UIProvider{
@凌驾
public Class你可以像Chris M所说的那样使用导航器,或者你可以尝试实现一个事件驱动的架构。我也使用Vaadin和Google Guava实现了一个类似的项目
如果你有兴趣,你可以在这里找到一些如何使用谷歌番石榴的例子。
下面您可以找到我的实现的一些代码片段:
// 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演示应用程序的代码。该代码也有一个如何处理的示例。请在此处查找:
您可以像Chris M所说的那样使用Navigator,也可以尝试实现一个事件驱动的体系结构。我也使用Vaadin和Google Guava实现了一个类似的项目
如果你有兴趣,你可以在这里找到一些如何使用谷歌番石榴的例子。
下面您可以找到我的实现的一些代码片段:
// 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演示应用程序的代码。该代码也有一个如何处理的示例。请在此处查找:
我现在理解了您要做的事情。您可以很容易地做到这一点。您需要将VaadinRequest转换为VaadinServletRequest。它传递VaadinRequest而不是VaadinServletRequest的原因是,您也可以将应用程序部署为portlet。在这种情况下,您需要将其转换为VaadinPortletRequest。Then您可以使用用户提供的服务器名
@Override
protected void init(VaadinRequest vaadinRequest) {
VaadinServletRequest req = (VaadinServletRequest) vaadinRequest;
String serverName = req.getServerName();
if (serverName.equals("www.login.mywebsite.com"))
{
login();
}
else
{
trial();
}
}
我现在明白了您要做什么。您可以很容易地做到这一点。您需要将VaadinRequest转换为VaadinServletRequest。它传递VaadinRequest而不是VaadinServletRequest的原因是,您也可以将应用程序部署为portlet。在这种情况下,您需要将其转换为VaadinPortletRequest。然后是y您可以使用用户提供的服务器名
@Override
protected void init(VaadinRequest vaadinRequest) {
VaadinServletRequest req = (VaadinServletRequest) vaadinRequest;
String serverName = req.getServerName();
if (serverName.equals("www.login.mywebsite.com"))
{
login();
}
else
{
trial();
}
}
我倾向于在这里使用导航器。不过,您需要稍微重构一下代码。@Chris M谢谢!您对如何在我的情况下实现这一点有什么见解吗?我通读了文档,但我不太明白。我如何使用它将www.trial.mywebsite.com重定向到trialUI类并重定向到www.trialUI.login.mywebsite.com登录到LoginUI类?我倾向于在这里使用导航器。不过,您需要对代码进行一些重构。@Chris M谢谢!您对如何针对我的情况实现这一点有什么见解吗?我通读了这些文档,但我不太明白。我如何使用它重定向www.trial.mywebsite.com到trialUI类并将www.login.mywebsite.com重定向到LoginUI类?这似乎有道理,但我如何将参数传递到我的请求?您可以在主网站中使用一个表单,该表单在使用按钮提交时传递POST参数,并将表单指向您的vaadin应用程序的url。相应地更新了答案好的,非常感谢!我会尝试一下。Web.xml必须以正确的方式编辑。我假设即使我的主网站和vaadin应用程序托管在不同的位置,这也会起作用。是的,你必须在Web.xml中包含UIProvider的设置,并删除注释。如果它们托管在不同的t位置,是的。我更新了代码以正确设置和检查参数。这似乎有道理,但我如何将参数传递给我的请求?您可以在主网站中使用一个表单,该表单在使用按钮提交时传递POST参数,并将表单指向您的vaadin应用程序的url。根据提示更新了答案非常感谢!我会尝试一下。Web.xml必须以正确的方式编辑?我假设即使我的主网站和vaadin应用程序托管在不同的位置,这也会起作用?是的,你必须在你的Web.xml中包含UIProvider的设置,并删除注释。如果它们托管在不同的位置,这应该会起作用ons,是的。我更新了代码以正确设置和检查参数。这几乎符合我的要求,但我正在将我的应用程序从openshift重定向到login.mywebsite.com。您提供的代码为我提供openshift的url,而不是login.mywebsite.com。您对此有解决方法吗?这几乎符合我的要求,但我正在重定向我的应用程序从openshift到login.mywebsite.com的应用程序。您提供的代码为我提供了openshift的url,而不是login.mywebsite.com的url。您对此有解决方法吗?