面对这些问题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 {
}
}
答案 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
您是否在浏览器端刷新/重新加载?您可以重新启动容器(完全暴力)并重新加载页面以查看它是否有所作为