gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:15:03 27 4
gpt4 key购买 nike

尝试学习 Spring 中的 MVC 基础知识(我只使用过 Spring 来构建 REST API),但我无法理解如何将新数据返回到同一 View ,看来我有很多重复的代码和 HTML 页面完全依赖 th:if 语句...

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

Controller :

@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;
}
}

欢迎.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。

现在,在您的情况下,一个 Controller 足以完成所需的操作。调用同一个 Controller 并在dao层添加一些逻辑。

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

您可以使用 mvc 的所有层( Controller 、服务、dao)高效地完成逻辑,而不是在 jsp 中使用逻辑

关于javascript - Spring MVC - 重新加载相同的 ModelAndView 但使用新的/不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com