我有一个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";
}
我想做的是返回到问候#rightHere,但我无法让它工作。有什么想法如何做到这一点?
3条答案
按热度按时间cs7cruho1#
这是一个适合我的解决方案:
e7arh2l62#
我不认为说“
return greeting#rightHere
“是有意义的。这是一个超链接,如果你创建一个REST API,你会返回超链接。不确定像Spring这样的框架是否知道#后面是什么。#应该是为浏览器准备的,它将滚动到该元素,如果它存在的话。虽然我可能是错的,但我相信Spring控制器不会“在不访问底层HTTP请求对象的情况下(大多数情况下,您永远不应该这样做),您的应用程序中的行为应该是相同的。我建议测试一下,确保你的页面上有很多文本,这样你就可以注意到跳转到id=rightHere的html元素。在你的应用中的某个地方有一个超链接
/greeting#rightHere
,看看它是否有效。我认为它会有效,你不需要在你的Spring控制器中做任何事情。**编辑:**我认为这里的问题还不清楚。我假设您的意思是,当您点击网页
/greeting#rightHere
上的链接时,您希望Web浏览器导航到问候页面,然后滚动到id为rightHere的html元素。我要告诉您的是,Spring不知道#后面的内容,#是针对浏览器的,浏览器本身会查看URL/greeting#rightHere
,导航到问候,然后查找id为rightHere的HTML元素,并在页面加载后滚动到那里。但是,您可能希望控制器返回问候页面的一个子部分,例如只返回rightHere元素,这在JSP中是使用模板或包含来实现的。但是,很难确定您在问什么,因为您似乎不理解我写的内容,并且混淆了谈论两件不同的事情,返回和跳跃...请考虑重新编写您的问题,并使用正确的语言简明扼要地表达您想要达到的目标。
q35jwt9p3#
对我来说,它是这样工作的:
在模板(index.html)中:
在索引控制器:
只有一个模板index.html,在提交表单后,它会跳转到表单位置,在本例中是在页面底部。