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

Thymeleaf页面刷新后续-现在使用AJAX

邓星光
2023-03-14

作为我之前关于使用Thymeleaf和防止页面刷新的问题的后续:

http://forum.thymeleaf.org/Preventing-page-refresh-Thymeleaf-amp-Spring-MVC-td4029155.html

基本上,我有一个工作的Spring MVC应用程序,它使用Thymeleaf来保存表单数据。当用户保存数据时,页面将刷新(因为我想把它们留在页面上进行更多编辑),我想消除页面刷新。

我编写了一些Javascript,使用jQueryAjax将数据发布到我的SpringMVC控制器。诀窍似乎是不使用submit按钮,只使用常规按钮并绑定JS函数将数据发送到服务器。

这一切似乎都很完美,但我想确保我了解正在发生的事情。特别是我想知道Thymeleaf现在是否是多余的。我不认为这是因为当我最初加载页面时,Thymeleaf仍然绑定到数据bean。通过在控制器的服务器端使用调试器,post请求似乎调用了映射方法并将数据传递给模型。

我希望你能评论这是否是实现这一目标的正确方式。

最后,我如何处理一个错误,例如存储库由于任何原因未能持久化数据?

非常感谢。

以下是表格的重要部分:

<FORM id="adminDataForm" action="#" th:action="@{/admin_ajax}" th:object="${adminFormAjax}" method="post">


<input type="button" value="Save Changes" id="post" onClick="sendData()" />

下面是Javascript:

function sendData()
{
        $.ajax(
        {
            type: "POST",
            data: $("#adminDataForm").serialize(),
            cache: false,
            url: "/admin_ajax",
            success: function(data) 
            {
                alert("Your changes have been saved");
            },
            error: function()
            {
                alert("Error - Data not saved");
            }

        });
}

这是控制器:

@SessionAttributes("adminFormAjax")
@Controller
public class TestController 
{
    final static protected long INDEX_RA = 2L;

    @Autowired
    private AdminDataRepository rep;

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

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

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

}

共有1个答案

唐钊
2023-03-14

所以答案的崩溃。

>

  • Thymeleaf不是冗余的,它在发送到客户端之前仍然会呈现HTML页面。Ajax只是在客户端为您做进一步的处理
  • 你也可以使用submit按钮,你只需要确保你的表单结构正确,并且你有javascript监听你的submit按钮点击。

    (点击,函数(){//do的东西});

    您可以像处理标准控制器一样处理Ajax控制器中的任何和所有异常/问题。您需要在不同级别上分离问题处理。e、 g.响应级别的问题应在代表级别进行管理,控制器/pojo应在控制器级别(或pojo,如果您使用其中一个进行处理)。您还应该通过全局媒体(例如ControllerAdvice)捕获任何异常

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

    • 问题内容: 如何定期使用PHP刷新页面?如果我用PHP无法做到这一点,那么最好的推荐方案是什么? 问题答案: 您可以使用PHP来做到这一点: 它会刷新您的当前页面,如果需要将其重定向到另一个页面,请使用以下命令:

    • 问题内容: 好的,我有一个仅包含的简单表格。当我们点击submit(通过ajax存储)时,在文本字段中写入的数据将存储在DB中。Ajax可以正常工作并提交数据,但是,页面会自动刷新,并且URL包含输入字段的内容。 我的表格: 阿贾克斯:- PHP的:- 结果显示在后,页面将刷新,URL变为: -chat.php?message = 454545&submit_message = 为什么要刷新页面?

    • 我保证,我已经谷歌了这一切。 我有一个Spring MVC 4应用程序,它使用Thymeleaf收集表单数据并将其放入数据库。效果很好,只是我希望我的应用程序在用户点击提交按钮后将其留在表单页面上,以便他们可以继续编辑。 每次单击提交时,都会调用控制器并返回视图,从而刷新页面。我想消除刷新,并添加一个警报以确认保存。 所以我开始将表单提交转换为AJAX,并意识到这将违背使用Thymeleaf的目的

    • 本文向大家介绍ASP.NET使用ajax实现分页局部刷新页面功能,包括了ASP.NET使用ajax实现分页局部刷新页面功能的使用技巧和注意事项,需要的朋友参考一下   listview列表实现分页是非常容易的。ListView分页是非常简单的,加上一个DataPager控件,把ListView的ID赋予就可以了。最开始我就是这么写的。(网上有人说这样是伪分页?)     然而这样写完,点击分页的效

    • 本文向大家介绍在Laravel中实现使用AJAX动态刷新部分页面,包括了在Laravel中实现使用AJAX动态刷新部分页面的使用技巧和注意事项,需要的朋友参考一下 AJAX相信大家都不陌生,有很多不同的Javascript Frameworks可以用来快速实现AJAX功能。那么今天我们一起来看一下如何在使用了PHP Frameworks的网站中使用AJAX来刷新页面的一小部分。 这里我使用的是jQ