Vaadin URL映射问题:子路径URL映射和自动URL映射无法正常工作

时间:2017-07-12 12:30:36

标签: java spring vaadin

面对这些问题w.r.t Vaadin UI和URL映射。

问题1:

我正在尝试使用Vaadin为我的实体进行基本的CRUD操作。首先,我想将一个UI类暴露给/ subpath / xyz url。但是子路径url映射在某种程度上不起作用。 (请注意,当我保留或删除@Spring(path =“myui”)时,它仍会映射到localhost:8080 / myui /而不是localhost:8080 / subpath / myui /

我错过了什么?

我一直关注Vaadin的文档但到目前为止没有运气。 https://vaadin.com/docs/-/part/framework/application/application-environment.html#application.environment.servlet-mapping

Problem2: 此外,Vaadin不会自动从类名生成URL映射。例如。 MyUI classname应该映射到localhost:8080 / my-ui /如果我没有在@SpringUI中给出路径属性(根据Vaadin的文档)。

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.spring.server.SpringVaadinServlet;
import com.vaadin.ui.*;


import javax.servlet.annotation.WebServlet;

@Theme("valo")
@Title("My UI")
@SpringUI(path="myui")
public class MyUI extends UI {
    @Override
    protected void init(VaadinRequest request) {
        // Create the content root layout for the UI
        VerticalLayout content = new VerticalLayout();
        setContent(content);

        // Display the greeting
        content.addComponent(new Label("Hello World!"));

        // Have a clickable button
        content.addComponent(new Button("Click Me!",
            click -> Notification.show("Clicked!")));
    }
    @WebServlet(urlPatterns = {"/admin/*", "/VAADIN/*"}, name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends SpringVaadinServlet {
    }

}

1 个答案:

答案 0 :(得分:0)

    package vaadinUI;

    import com.vaadin.annotations.Theme;
    import com.vaadin.annotations.Title;
    import com.vaadin.annotations.VaadinServletConfiguration;
    import com.vaadin.server.VaadinRequest;
    import com.vaadin.spring.annotation.SpringUI;
    import com.vaadin.spring.server.SpringVaadinServlet;
    import com.vaadin.ui.*;


    import javax.servlet.annotation.WebServlet;

    @Theme("valo")
    @Title("My UI")
    @SpringUI(path="myui/subpath")
    public class MyUISubPath extends UI {
        @Override
        protected void init(VaadinRequest request) {
            // Create the content root layout for the UI
            VerticalLayout content = new VerticalLayout();
            setContent(content);

            // Display the greeting
            content.addComponent(new Label("Hello World!"));

            // Have a clickable button
            content.addComponent(new Button("Click Me!",
                click -> Notification.show("Clicked!")));
        }
    }


package vaadinUI;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.spring.server.SpringVaadinServlet;
import com.vaadin.ui.*;


import javax.servlet.annotation.WebServlet;

@Theme("valo")
@Title("My UI")
@SpringUI(path="myui")
public class MyUI extends UI {
    @Override
    protected void init(VaadinRequest request) {
        // Create the content root layout for the UI
        VerticalLayout content = new VerticalLayout();
        setContent(content);

        // Display the greeting
        content.addComponent(new Label("Hello World!"));

        // Have a clickable button
        content.addComponent(new Button("Click Me!",
            click -> Notification.show("Clicked!")));
    }
}

我使用的是8.0.X,这对我有用。你可能不得不改变一些事情。在不同路径中重用相同的UI类可能不是那么明智。或者框架通过设计拒绝这个

问题2:"空字符串(默认)将UI映射到servlet的根目录"我读它的方式是映射到....:8080 /

编辑

误读的文档版本

修改

我尝试了你的代码,它的行为和我描述的一样。 @SpringUI()映射到root,路径映射到路径。映射到myui / subpath的UI按预期工作。所以我将从一个新项目开始,并刷新.m2 repo。

仅供参考@WebServlet中的值优先于@VaadinServletConfiguration

您是否在浏览器端刷新/重新加载?您可以重新启动容器(完全暴力)并重新加载页面以查看它是否有所作为