Spring boot +(Thymeleaf正在覆盖React JS视图)

时间:2019-11-28 11:40:08

标签: reactjs spring spring-boot thymeleaf

我已经用Thymeleaf创建了一个错误页面,并以此方式使用它,因为我可以通过控制器将错误消息发送给用户。

@ExceptionHandler(Exception.class)
public ModelAndView controllerExceptionHandler(
    Exception e,
    HttpServletRequest request) {
    ModelAndView mav = new ModelAndView();
    String[] messages = e.getMessage().split("</br>");
    mav.addObject("message", messages);
    mav.addObject("timestamp", new Date());
    mav.addObject("url", request.getRequestURL());

    mav.addObject("headerMessage", "Error :(");
    mav.addObject("contentMessage", "We are working hard to resolve it.");
    mav.setViewName("error");

    mav.addObject("status", 500);

    return mav;
}

在模板文件中,我有这样的东西:

<h1 class="mr-3 pr-3 align-top border-right inline-block align-content-center" th:text="${status}">404</h1>
<div class="inline-block align-middle">
    <div>
        <h1>Something went wrong...</h1>
    </div>
    <th:block th:each="msg : ${message}">
        <h2 class="font-weight-normal lead" id="desc" th:text="${msg}">The page you requested was not found.</h2>
    </th:block>
</div>

以前,我有一个简单的React JS应用程序,该应用程序也与Spring Boot和Thymeleaf一起运行,然后使用Thymeleaf模板进行演示。我有一个模板index.html实际上是React JS构建文件,因此每次必须将其中的构建文件复制到JS和CSS文件到一个静态文件夹中(构建后)。现在,React APP变得更加复杂,我决定使用frontendmaven插件与后端直接构建它。

在解析ReactJS视图时如何告诉Spring Boot不要尝试使用Thymeleaf?这就是我提供ReactJS视图的方式。

@RequestMapping("/")
public String index() {
    return "index.html";
}

还是有可能摆脱Thymeleaf?服务那些视图时,是否可以通过Java控制器将变量发送到ReactJS视图?模型和视图的例子?

1 个答案:

答案 0 :(得分:2)

  

在解决时如何告诉Spring Boot不要尝试使用Thymeleaf   反应JS视图?

在Web配置中删除ThymeleafViewResolver并切换到Rest api(@Restcontroller而不是@Controller)。这样,您就告诉Spring不要渲染视图,而是充当api端点。

现在,您可以更新您的react代码,以调用这些使用Maven-frontend-plugin预先构建并部署的Spring rest api。

  

现在问题来了,您的应用程序的出发点是什么

仅出于此目的,您可以创建一个控制器,该控制器将处理对“ /”的请求,并将返回位于resources / template文件夹下的索引页。该index.html页面将使用您预先构建的react页面作为-

<script src="built/bundle.js"></script>

演示应用程序:https://github.com/ankidaemon/Spring5-ReactJS/tree/master/Section5/Video5.3/SpringSecurity-Reactjs-RestAPI

  

是否可以通过Java将变量发送到React JS视图   控制器提供这些视图时

这被称为服务器端渲染,但是对于react来说,它不同于jsp和freemarker,thymeleaf等,我想说这不是一种简单的方法来实现react。您可以尝试使用--https://codeburst.io/jsx-react-js-java-server-side-rendering-ssr-2018-cf3aaff7969d