如果用户试图离开包含未保存数据的页面,我有一个页面应该发出警告。此对话框的意思是“您有未保存的数据。您要继续吗?”
问题是当用户单击链接继续前进并显示对话框时,表单值变为空白。我希望将值保持在原位,以便用户实际上可以选择不继续,然后仍然将输入的内容留在表单中。
代码现在的方式是它为表单是否有脏数据保留一个标志,这是一个隐藏变量:
<input type="hidden" name="saveStatus" value="<%=saveStatus%>" />
onclick
触摸表格用和设置这个隐藏变量onkeypressed
。
在服务器上,我有一些检查数据是否脏的逻辑:
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;
}
我想这是我可以检查服务器端的变量并重新填充所有内容的地方,然后使用像上面这样的技术和隐藏变量来保留表单值。
你认为这个想法会奏效还是你能提出替代解决方案?