我有一个Maven项目,我在pom.xml中添加了vaadin-push作为依赖项。
第一个问题是在MainUI类中,当我添加注释typeof(Resources).GetMethod("LoadAll",
System.Reflection.BindingFlags.Static,
new Type[] { typeof(System.String),typeof(System.Type)},
null);
时,它无法识别@Push(PushMode.MANUAL)
,所以我被PushMode
困住了。当我添加它时,我在访问UI时收到错误消息:
@Push
我尝试按照vaadin website on push上的说明操作,所以我添加了一个web.xml(之前我没有)。我不确定它是否被使用。我更愿意仅通过注释来配置它。
{"timestamp":1519112562626,"status":500,"error":"Internal Server Error","exception":"com.vaadin.server.ServiceException","message":"java.lang.IllegalStateException: Push is not available. See previous log messages for more information.","path":"/bp/list"}
我真正希望实现的是在Rest请求上更新UI,我认为Rest部分已经与Push分开了:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Business Process UI</servlet-name>
<servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
<init-param>
<param-name>UI</param-name>
<param-value>com.oursys.bpspkpibpcheck.view.MainUI</param-value>
</init-param>
<!-- Enable server push -->
<init-param>
<param-name>pushmode</param-name>
<param-value>automatic</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
</web-app>
的pom.xml。我删除了vaadin-push,因为它告诉我我正在覆盖自动配置的那个。
public class UILister {
private static HashMap<UUID,MainUI> uiByUuid = new HashMap<UUID,MainUI>();
public static void closeUIConnectorFrame(UUID uuid) {
MainUI ui = uiByUuid.get(uuid);
if(ui != null) {
ui.access(new Runnable() {
@Override
public void run() {
ui.closeConnectorFrame();
ui.push();
}}
);
}
}
public static void addUI(UUID uuid, MainUI mainUI) {
uiByUuid.put(uuid, mainUI);
}
}
答案 0 :(得分:1)
在你的pom中,添加
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-push</artifactId>
</dependency>
您不需要在此处指定<version>
,因为vaadin-bom
(物料清单)的版本是托管,它们为每个版本声明了正确的版本工件(这样可以更容易避免与同一框架的不同版本存在冲突的依赖关系),但导入BOM并不能自行添加依赖项。
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
我删除了vaadin-push,因为它告诉我我正在覆盖自动配置的那个。
自动配置的 是指BOM的托管版本。例如,当使用vaadin-push
标记向<version>
添加依赖项时,Eclipse会发出以下警告:
覆盖vaadin-push的托管版本8.1.1