0

在带有 Spring boot 的 Vaadin 8.0 项目中,我正在尝试使用 Vaadin 插件(WTPdfViewer,https://github.com/WhitesteinTechnologies/wt-pdf-viewer)来预览 PDF 文件。

我遇到的问题是,在尝试查看 PDF 文件时,插件会尝试从我认为错误的路径中获取关联的 javascript 资源。因此它试图从

http://localhost:8080/my/uipath/APP/PUBLISHED/pdf.worker.js

而不是我认为正确的:

http://localhost:8080/vaadinServlet/APP/PUBLISHED/pdf.worker.js

该项目的非 Spring Boot 版本可以正常工作,所以我认为它与 Vaadin 附加组件在 Spring-boot 项目中的工作方式有关。有任何想法吗?

4

2 回答 2

2

我认为这与 Vaadin 附加组件在 Spring-boot 项目中的工作方式有关。

不,这不是 Spring Boot 附加组件的普遍问题。这个特定的插件有一个小缺陷,它在这里有 js 文件的硬编码路径:

https://github.com/WhitesteinTechnologies/wt-pdf-viewer/blob/master/src/main/java/com/whitestein/vaadin/widgets/wtpdfviewer/client/WTPdfViewerWidget.java#L920

您找到的解决方法有助于解决此问题。

更好的方法是向插件发布补丁并参数化路径或进行其他适当的更正。

于 2018-06-05T17:26:50.440 回答
1

似乎其他人也遇到了同样的问题,并在这里发布了解决方案:404 for js files when using spring boot with vaadin

我正在复制那个答案;

简而言之,解决方案是创建一个控制器,它将对错误 URL 的请求转发到正确的 URL。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class PdfJsRedirectController {
    private static final String WORKER_JS_INCORRECT_PATH = "/APP/PUBLISHED/pdf.worker.js";
    private static final String WORKER_JS_CORRECT_FORWARD_PATH = "forward:/vaadinServlet/APP/PUBLISHED/pdf.worker.js";

    @RequestMapping(value = WORKER_JS_INCORRECT_PATH)
    public String forwardWorkerJsRequestToVaadin() {
        return WORKER_JS_CORRECT_FORWARD_PATH;
    }
}

至于为什么会发生这种情况,链接的答案提供了详细的解释。

于 2018-06-05T17:19:48.250 回答