我有这个html文件
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>
<form action="#" th:action="@{/greeting}" th:object="${greeting}" method="post">
<p>Id: <input type="text" th:field="*{id}" /></p>
<p>Message: <input type="text" th:field="*{content}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
<div style="height: 1200px">
</div>
<p id="rightHere">
There there
</p>
</body>
</html>
和这个控制器:
@GetMapping("/greeting")
public String greetingForm(Model model) {
model.addAttribute("greeting", new Greeting());
return "greeting";
}
我想要做的就是回到问候#右边,但我无法让它发挥作用。有关如何做到这一点的任何想法?
答案 0 :(得分:1)
这是一个对我有用的解决方案:
@GetMapping("/greeting")
public String greetingForm(Model model) {
model.addAttribute("greeting", new Greeting());
return "redirect:greeting#rightHere";
}
答案 1 :(得分:0)
我认为说“return greeting#rightHere
”是不合理的。这是一个超链接,如果您正在创建REST API,则会返回超链接。不确定像Spring这样的框架是否知道#之后会发生什么。 #假设是为浏览器,它将滚动到该元素,如果它存在。虽然我可能错了,但我相信Spring Controller不会知道来自greeting#rightHere
和greeting
的get URL请求之间的差异,而不会访问底层的HTTP请求对象(大多数时候你应该这样做)从来没有)你的应用程序中的行为应该是相同的。
我建议对此进行测试,确保在页面上分配了大量文本,以便您可以注意到使用id = rightHere跳转到您的html元素。并在您的应用程序/greeting#rightHere
的某处添加超链接,看看它是否有效。我认为它会,你不应该在你的Spring控制器中做任何事情。
编辑:我认为现在还不清楚这里有什么问题。我假设你想要的是当你点击网页/greeting#rightHere
上的链接时,你希望网络浏览器导航到问候页面,然后滚动到id为rightHere的html元素。而且我告诉你Spring对于#之后的内容一无所知,#是针对浏览器的,浏览器本身会查看URL /greeting#rightHere
,导航到问候语,然后看看对于id为rightHere的HTML元素,并在页面加载后滚动。
但也许你的意思是你希望你的控制器返回问候页面的一个子部分,就像只有rightHere元素一样,你可以用模板或者包含在JSP中。但是很难确定你在问什么,因为你似乎不明白我写的是什么,混合谈论两个不同的东西,回归和跳跃...请考虑重写你的问题,并简明扼要你想要的使用正确的语言来实现。