首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重新填充表单变量?

如何重新填充表单变量?
EN

Stack Overflow用户
提问于 2012-10-03 15:32:07
回答 1查看 112关注 0票数 0

我有一个页面,如果用户试图离开包含未保存数据的页面,应该会发出警告。此对话框表示“您有未保存的数据。是否要继续?”

问题是,当用户单击一个链接继续移动时,表单值变为空白,并显示该对话框。我希望表单中的值保持不变,这样用户实际上可以选择不继续,然后仍然保留输入到表单中的内容。

代码现在的方式是,它保留了一个标记,用于指示表单是否有脏数据,这是一个隐藏变量:

<input type="hidden" name="saveStatus" value="<%=saveStatus%>" />

触摸表单将使用onclickonkeypressed设置此隐藏变量。

在服务器上,我有一些检查数据是否脏的逻辑:

代码语言:javascript
复制
public boolean returnToUnsavedData(ISessionHandler sessionHandler,
        Action action) {
    String saveStatus = sessionHandler.getRequestParameter("saveStatus");

    if (saveStatus != null && !saveStatus.trim().equals("")) {
        setHasUnsavedData(true);
    } else {
        setHasUnsavedData(false);
    }

    if (hasUnsavedData()) {
        if (!"menuHasUnsavedDataOk".equalsIgnoreCase(action
                .getActionCommand())
                && !action.getActionName().equals("Administrera")) {
            ResourceBundle messages = ResourceBundle.getBundle("messages");
            UserMessage um;
            if (action.getActionCommand().equals("fastsearch")) {

                um = new ExtendedUserMessage(
                        messages.getString("PV24"), UserMessage.TYPE_WARNING,
                        "Varning", action.getActionName(),
                        action.getActionCommand(), sessionHandler.getRequest().getParameter("fastsearch"));
            } else {
             um = new ExtendedUserMessage(
                    messages.getString("PV24"), UserMessage.TYPE_WARNING,
                    "Varning", action.getActionName(),
                    action.getActionCommand());
            }
            action.addUserMessage(um);
            action.setReturnPage(action.getCurrPage());
            setLatestActionTarget(action.getActionTarget());
            return true;
        } else {
            setHasUnsavedData(false);
        }
    }

    return false;
}

我想这就是我可以在服务器端检查变量并重新填充所有内容的地方,然后使用类似上面的技术与隐藏变量一起保存表单值。

你认为这个想法会行得通吗?或者你能提出替代的解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-03 17:24:11

我认为这里不需要服务器端的参与,只需使用javascript即可实现

代码语言:javascript
复制
<input type="hidden" id="saveStatus" name="saveStatus" value="<%= saveStatus %>"/>

在页面卸载之前注册一个观察者,并在其中检查saveStatus变量:

代码语言:javascript
复制
window.onbeforeunload = function() { 
    if (document.getElementById('saveStatus').value) {
        return 'You have unsaved changes, are you sure you want to leave the page?'); 
    }
};

然而,通过使用这个,你将不会有你自己的‘自定义’确认屏幕,将使用浏览器的内置确认(类似于堆栈溢出)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12703834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档