当前位置: 首页 > 知识库问答 >
问题:

Spring MVC 4和Thymeleaf-防止页面刷新

楮阳
2023-03-14

我保证,我已经谷歌了这一切。

我有一个Spring MVC 4应用程序,它使用Thymeleaf收集表单数据并将其放入数据库。效果很好,只是我希望我的应用程序在用户点击提交按钮后将其留在表单页面上,以便他们可以继续编辑。

每次单击提交时,都会调用控制器并返回视图,从而刷新页面。我想消除刷新,并添加一个警报以确认保存。

所以我开始将表单提交转换为AJAX,并意识到这将违背使用Thymeleaf的目的。Thymeleaf已经将表单字段映射到支持bean并且做得很好,那么为什么要替换该机制呢?

那么,有没有办法让Spring MVC控制器处理提交请求,但不返回视图的新实例?

我尝试不返回视图,但这导致了一个错误,因为没有任何内容映射到模型属性。我尝试使用@ResponseBody并返回数据,但这导致JSON在网页中呈现,而且我也不知道如何获取数据并对其进行处理。

我还试图找到一种方法来连接到提交按钮以尝试调用javascript预防默认值(),但在那里没有任何运气。

非常感谢您的建议。。。

这是我的控制器代码,非常简单:

@SessionAttributes("adminFormAjax")
@Controller
public class TestController 
{
    @Autowired
    private AdminDataRepository rep;

    @RequestMapping(value="/admin_ajax", method=RequestMethod.GET)
    public String adminFormAjax(Model model) 
    {
        AdminData ad = rep.findById(1L);

        // If there is no configuration record, create one and assign the primary key as 1.
        if(ad == null)
        {
            ad = new AdminData();
            ad.setId(1L);
        }

        model.addAttribute("adminFormAjax", ad);
        return "adminFormAjax";
    }

    @RequestMapping(value="/admin_ajax", method=RequestMethod.POST)
    public @ResponseBody AdminData adminSubmit(@ModelAttribute("adminFormAjax") AdminData ad, Model model) 
    {
        // rep.save(ad);
        model.addAttribute("adminFormAjax", ad);
        return ad;
    }

}

共有3个答案

裴甫
2023-03-14

我使用rest控制器和ajax来处理这个问题

符懿轩
2023-03-14

希望这能对未来的读者有所帮助。我们可以使用th:replace来避免javascript/ajax。请参见下面的示例。

@GetMapping("/admin-reload")
public String reloadElementDiv(Model model) {       
    AdminData ad = rep.findById(1L);

    // If there is no configuration record, create one and assign the primary key as 1.
    if(ad == null)
    {
        ad = new AdminData();
        ad.setId(1L);
    }

    model.addAttribute("adminAttrib", ad);

    return "adminForm";
}

现在,在父html(如home.html)中,您可以使用以下内容*这意味着将这个标签替换为admin中id=“admin div”的元素。html

<div th:replace="~{admin :: #admin-div}">
</div>

然后在一个单独的html文件中,放置片段html代码。其中,在本例中,它是admin。html。

<div id="admin-div">
   <span th:text="${ad.id}"></span>
</div>

您可以放置一个链接/按钮来触发,通过使用th:href刷新div元素

<a href="" th:href="@{/admin-reload}"><span>Edit</span></a>
刘焱
2023-03-14

因此,如果您希望能够在不更改页面的情况下将表单数据提交给控制器,则thymeleaf会将页面呈现为HTML,并将其发送给客户端进行显示。

您肯定需要使用javascript/ajax发布表单内容并保持页面原样。

例如,如果您只想更新包含表单的部分,您可以调用返回片段并显示包含相关表单信息的片段的控制器方法。

 类似资料:
  • 本文向大家介绍php采用session实现防止页面重复刷新,包括了php采用session实现防止页面重复刷新的使用技巧和注意事项,需要的朋友参考一下 如何防止页面重复刷新,在php环境下可以利用session来轻松实现。 b.php的代码 代码很简单,无非是把ip,以及通过POST方式提交到需要防刷新页面的数据经过md5加密后写入session中,再通过存储的session来判断刷新时间间隔从而

  • 本文向大家介绍php防止CC攻击代码 php防止网页频繁刷新,包括了php防止CC攻击代码 php防止网页频繁刷新的使用技巧和注意事项,需要的朋友参考一下 网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的

  • 问题内容: 在表单中使用按钮时出现问题。我希望该按钮调用功能。它确实可以,但是刷新页面的结果令人讨厌。 我的简单代码是这样的 单击该按钮后,该函数将在页面刷新时被调用,这会重置所有我先前的请求,这会影响到当前页面,这是先前请求的结果。 我应该怎么做才能防止页面刷新? 问题答案: 让我们返回false。这将解决它。

  • 在我的项目中,我有两页,第一页用于输入数据,第二页用于向用户显示数据。刷新结果页时,数据将被复制。我试图解决这个问题,但我不熟悉PRG模式。如果用户刷新结果页,我希望防止重复。

  • 我在这里观看了spring loaded的演示http://www.youtube.com/watch?v=GTrNkhVnJBU 它对于类更改非常有效,但是有没有办法让它在视图层工作,特别是SpringMVC和Thymeleaf模板。

  • 由于我不能再使用复选框技巧,我不得不使用