Spring MVC Spring控制器,返回页面的特定区域

xt0899hw  于 2022-11-14  发布在  Spring
关注(0)|答案(3)|浏览(125)

我有一个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,但我无法让它工作。有什么想法如何做到这一点?

cs7cruho

cs7cruho1#

这是一个适合我的解决方案:

@GetMapping("/greeting")
public String greetingForm(Model model) {
    model.addAttribute("greeting", new Greeting());
    return "redirect:greeting#rightHere";
}
e7arh2l6

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中是使用模板或包含来实现的。但是,很难确定您在问什么,因为您似乎不理解我写的内容,并且混淆了谈论两件不同的事情,返回和跳跃...请考虑重新编写您的问题,并使用正确的语言简明扼要地表达您想要达到的目标。

q35jwt9p

q35jwt9p3#

对我来说,它是这样工作的:
在模板(index.html)中:

<div id="index-section4">
...
<form id="addLeaduser" th:action="@{/save}" method="POST" 
th:object="${leaduser}">
 ...
 <input  type="submit" value="Apply">
 </form>
 ...
</div>

在索引控制器:

@PostMapping("/save")
public String saveLeaduser(@ModelAttribute("leaduser")
                                   LeaduserEntity leaduser,
                           @RequestParam(name="g-recaptcha-response")
                                   String captcha, Model model)
{
...
return "redirect:#index-section4";
}

只有一个模板index.html,在提交表单后,它会跳转到表单位置,在本例中是在页面底部。

相关问题