Javascript Spring MVC-重新加载相同的ModelAndView,但使用新的/不同的数据

Javascript Spring MVC-重新加载相同的ModelAndView,但使用新的/不同的数据,javascript,java,html,spring-mvc,thymeleaf,Javascript,Java,Html,Spring Mvc,Thymeleaf,试图在Spring中学习MVC的基础知识(我只使用Spring构建RESTAPI),但我在理解如何将新数据返回到同一视图时遇到了困难,似乎我有很多重复的代码,HTML页面完全依赖于th:if语句 发出POST请求,然后用新的/更新的数据加载相同的ModelAndView的最佳方式是什么?代码如下: 控制器: @Controller public class ColorController { private ColorService colorService; @Autowired

试图在Spring中学习MVC的基础知识(我只使用Spring构建RESTAPI),但我在理解如何将新数据返回到同一视图时遇到了困难,似乎我有很多重复的代码,HTML页面完全依赖于th:if语句

发出POST请求,然后用新的/更新的数据加载相同的ModelAndView的最佳方式是什么?代码如下:

控制器:

@Controller
public class ColorController {

  private ColorService colorService;

  @Autowired
  public ColorController(ColorService colorService) {
    this.colorService = colorService;
  }

  //homepage
  @GetMapping("/")
  public ModelAndView home(ModelAndView welcomeMAV) {
    welcomeMAV.setViewName("welcome");
    welcomeMAV.addObject("message", "What is your RGB color?");
    welcomeMAV.addObject("rgbcolor", new RGBColour());
    welcomeMAV.addObject("hexValue", null);
    return welcomeMAV;
  }

  @PostMapping("/color")
  public ModelAndView colorConvert(ModelAndView welcomeMAV, @ModelAttribute RGBColour rgbColour) {
    welcomeMAV.setViewName("welcome");
    welcomeMAV.addObject("message", "What is your RGB color?");
    welcomeMAV.addObject("rgbcolor", new RGBColour());
    welcomeMAV.addObject("hexValue",  colorService.convertRGBToHex(rgbColour));
    return welcomeMAV;
  }
}
welcome.html:

<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

  <head th:insert="fragments/header.html">
    <!-- insert <head> html here -->
  </head>

  <body>

    <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
      <a class="navbar-brand" href="#">The NavBar</a>
    </nav>

    <main role="main" class="container">

      <div class="starter-template">
        <br />
        <br />
        <br />
        <h1>Bytes and Bits</h1>
        <h2>
          Convert your colours
        </h2>
        <hr />

        <p th:if="${hexValue == null}" th:text="${message}" th:unless="${message == null}">No message</p>
      </div>

      <div class="row">
        <div class="col-md-6">
          <form th:if="${hexValue == null}" action="#" th:action="@{/color}" th:object="${rgbcolor}" method="post">
            <p>Red: <input id="red" placeholder="0" class="form-control" type="text" th:field="*{red}" onchange="getRed()" /></p>
            <p>Green: <input id="green" placeholder="0" class="form-control" type="text" th:field="*{green}" onchange="getGreen()" /></p>
            <p>Blue: <input id="blue" placeholder="0" class="form-control" type="text" th:field="*{blue}" onchange="getBlue()"/></p>
            <p><input class="btn btn-primary" type="submit" value="Submit" /> <input class="btn btn-danger" type="reset" value="Reset" /></p>
          </form>
          <p class="hex-color-text" th:if="${hexValue != null}">The hex value is: <span class="hex-color-text" id="hex-color-text" th:if="${hexValue != null}" th:text="${hexValue}"></span></p>
        </div>
        <div class="col-md-6">
          <div class="color-preview" id="color-preview">
            <p class="color-preview-text" id="color-preview-text"></p>
          </div>
        </div>
      </div>

      <a class="btn btn-primary" th:if="${hexValue != null}" href="/">Reset</a>

    </main>
    <!-- /.container -->

    <script type="text/javascript" th:src="@{/js/main.js}"></script>
  </body>
</html>




字节和位 变换你的颜色

没有消息

红色:

绿色:

蓝色:

十六进制值为:


如果希望在不重新加载的情况下刷新页面,则应使用javascript或jquery

现在,在您的情况下,一个控制器足以执行所需的操作。调用相同的控制器并在dao层中添加一些逻辑

如果选择了颜色,则将其发送到jsp,否则返回null


与jsp中的逻辑不同,您可以使用mvc的所有层(控制器、服务、dao)高效地完成这项工作。

如果您希望在不重新加载的情况下刷新页面,应该使用javascript或jquery

现在,在您的情况下,一个控制器足以执行所需的操作。调用相同的控制器并在dao层中添加一些逻辑

如果选择了颜色,则将其发送到jsp,否则返回null


不必在jsp中使用逻辑,您可以使用mvc的所有层(控制器、服务、dao)高效地实现这一点。

不必在mvc的任何层中应用逻辑,而是为业务逻辑调用服务层,而不用在mvc的任何层中应用逻辑,而是为业务逻辑调用服务层