带有Spring Boot Web的OpenUI5 - 这些可以一起工作吗?

时间:2016-05-06 02:56:49

标签: spring-mvc spring-boot sapui5

我正在尝试用Thymeleaf和嵌入式Tomcat创建一个非常简单的Spring Boot 1.3.3 Web应用程序,使用OpenUI5作为客户端javascript UI库... 但我似乎无法将OpenUI5转换为加载data-sap-ui-resourceroots。这应该是可能的吗?

我开始转到start.spring.io并使用Web和Thymeleaf依赖项生成maven项目,然后添加一个带有XML视图的基本OpenUI5结构。我按照以下教程:

  1. Serving Web Content with Spring MVC
  2. OpenUI5 Walkthrough - Step 4: XML Views
  3. 我最终得到了以下项目结构:

    root
    ├── src
    │    ├── main
    │    │    ├── java
    │    │    │   └── myPackage
    │    │    │       ├── controllers
    │    │    │       │   └── LandingPageController.java
    │    │    │       └── Application.java
    │    │    └── resources
    │    │        ├── application.properties
    │    │        ├── static
    │    │        │   └── webapp
    │    │        │       └── view
    │    │        │           └── App.view.xml
    │    │        └── templates
    │    │            └── landingPage.html
    │    └── test
    │        └── java
    │            └── myPackage
    │                └── ApplicationTests.java
    │
    └── pom.xml
    

    尽管这些教程基本上都是标准的,但为了完整性,我将包含我的源代码:

    Application.java:

    package myPackage;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    LandingPageController.java:

    package myPackage.controllers;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    @RequestMapping("/")
    public class LandingPageController {
    
        @RequestMapping(method=RequestMethod.GET)
        public String redirect() {
            return "landingPage";
        }
    }
    

    landingPage.html:

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta charset="utf-8" />
        <title>SAPUI5 Walkthrough</title>
        <script
         id="sap-ui-bootstrap"
         src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" 
         data-sap-ui-theme="sap_bluecrystal"
         data-sap-ui-libs="sap.m"
         data-sap-ui-compatVersion="edge"
         data-sap-ui-preload="async" 
         data-sap-ui-resourceroots='{
            "sap.ui.demo.wt": "./"
         }'>
        </script>
        <script>
         sap.ui.getCore().attachInit(function () {
             sap.ui.xmlview({
                 viewName : "sap.ui.demo.wt.view.App"
              }).placeAt("content");
         });
        </script>
      </head>
      <body class="sapUiBody" id="content">
      </body>
    </html>
    

    App.view.xml:

    <mvc:View
       xmlns="sap.m"
       xmlns:mvc="sap.ui.core.mvc">
       <Text text="Hello World"/>
    </mvc:View>
    

    我的application.properties文件为空,pom.xml正是Spring Initializr生成的内容。

    我认为问题出在landingPage.html中的这一行,但我不知道除了“./":

    之外还有什么内容。
    data-sap-ui-resourceroots='{
            "sap.ui.demo.wt": "./"
         }
    

    我能够在OpenUI5教程中完成第3步。但是,似乎一旦我必须在XML文件中定义视图,OpenUI5库就无法找到它。我不知道在哪里放置App.view.xml文件,我原以为静态文件夹下的任何地方都可以正常...

    我不确定这是否与我使用嵌入式Tomcat的事实有关,但我希望这可以使用嵌入式Tomcat。

    关于如何使这项工作的任何建议?

1 个答案:

答案 0 :(得分:0)

我不熟悉Spring或任何提到的Java框架,但我可以尝试使用resourceRoots来帮助您。

使用该设置,您可以告诉OpenUI5框架,在哪里可以找到某些资源。

设置"sap.ui.demo.wt": "./"表示以sap.ui.demo.wt开头的所有内容都可以在与当前页面/文件相同的目录中找到。任何进一步的.<something>表示具有该名称的子文件夹。

您可以使用例如:
来定义相对于html文件或绝对值的resourceRoots "sap.ui.demo.wt": "/resources/static/webapp"
在这种情况下,sap.ui.demo.wt.view.App会找到(或至少查找)名为/resources/static/webapp/view/App.view.xml的视图。