【问题标题】:How to get a webpage to re-access the database when reloading重新加载时如何让网页重新访问数据库
【发布时间】:2019-09-30 20:04:59
【问题描述】:

有配置文件,每个配置文件都可以有一个分配的“主人”。每个主控可以有几个不同的配置文件(这是主控的全部要点),每个配置可以没有主控或只有一个。 我有两个字段:一个下拉菜单(由数据库填充)和一个文本字段。文本字段旁边有一个保存按钮。如果初始下拉菜单选择是菜单中的任何“主”,则文本字段会自动填充选择,供用户编辑。如果他们更改文本字段,即来自“Master, Inc.”到“Master, Incorporated”,然后点击按钮,它将更改数据库中的master名称,并重新加载页面。新的主名称将是“Master, Incorporated”。这就是我要的。但是,如果下拉选择更改为初始选择以外的内容,然后编辑该选项并单击按钮,则页面将重新加载并显示更改之前的原始选择。然而,分配的主服务器实际上已经在数据库中发生了变化,这可以通过手动签入 Oracle 以及离开页面然后手动重新访问它来证明,在这种情况下,它最终会更新。 同样,如果他们在下拉列表中选择“创建新主控”,则文本字段为空白,并且其行为略有不同。他们可以输入一个新的主名称,单击该按钮将在数据库中创建一个新条目,并将其分配给选定的配置文件。这有同样的问题:数据库更新,但除非您手动离开然后再次搜索配置文件,否则表单不会更改。 如果下拉选择为空,则按钮和文本字段都被禁用,这很好。

我试过 location.reload() 和 location.reload(true),但都没有任何效果。如果我在用户单击按钮后将用户从个人资料中踢出,当他们重新访问个人资料时,它会更新,但显然这不是我想要的。

    function editMaster(){
        var agentID = document.getElementById("agentID").value;
        var updated = new Date();
        updated = updated.toShortFormat();
        var newName = document.getElementById("agentName").value;
        var updateID = document.getElementById("agentDropdown").value

        var jsonURL = "${urlBase}"+"/editMaster/" + newName + "/" + updated + "/" + updateID + "/" + agentID + ".json?jsoncallback=?";
        var xhttp = jQuery.getJSON(jsonURL, function(obj, textStatus){
            window.location.reload(true);
        });
    }

    function addMaster(obj){
        var agentID = document.getElementById("agentID").value;
        var created = new Date();
        created = created.toShortFormat();
        var updated = created;
        var updateID = document.getElementById("agentDropdown").value;
        var createID = (parseInt(updateID, 10) + 1);
        var newName = document.getElementById("agentName").value;
        var create = "  Create New Agent Master";
        if(newName == null || newName == ""){
            alert("You have to enter a new name to add it.");
        }
        else{
            var jsonURL = '${urlBase}/addMaster/' + newName + '/' + updated + '/' + updateID + '/' + created + '/' + createID + '/' + create + '/' + agentID + '.json?jsoncallback=?';
            var xhttp = jQuery.getJSON(jsonURL, function(obj, textStatus){
                window.location.reload(true);
            });

        }
    }

这些都按预期工作,除了 window.location.reload(true);没有正确更新页面。如前所述,数据库确实会更新,但表单本身不会更新,除非页面完全离开然后重新访问。虽然用户可以简单地被踢回搜索页面并重新访问该页面,但这是不可接受的,我需要为用户消除该额外步骤。如果重要,数据库更新在与 jsp 不同的文件中完成。 RequestMapping 在控制器中完成,控制器分离所有变量并将它们传递给 ProfileDao.java 中的函数。

【问题讨论】:

    标签: javascript jquery spring hibernate


    【解决方案1】:

    我认为您使用数据库填充的下拉列表没有在页面加载中呈现。您正在搜索页面或任何早期阶段填充下拉列表。尝试在要反映更改的页面中填充下拉菜单。

    【讨论】:

    • 它在包含表单所有信息的 JSP 文件中创建和填充。
    • 你可以在你的jsp文件中添加这样的脚本。链接 --> codeshare.io/21BLRq 这段代码的作用是在单击保存按钮时重新填充下拉菜单。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多