ユーザーがデータを保存していない状態でページを離れようとした場合に警告するページがあります。このダイアログは、「保存されていないデータがあります。続行しますか?」という意味です。
問題は、ユーザーがリンクをクリックして先に進み、ダイアログが表示されると、フォームの値が空白になることです。ユーザーが実際に続行しないことを選択しても、フォームに入力されたものをそのままにしておくことができるように、その場に留まるように値を形成したいと考えています。
現在のコードは、フォームにダーティ データがあり、それが隠し変数であるかどうかを示すフラグを保持するようになっています。
<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;
}
これは、サーバーサイドで変数をチェックしてすべてを再入力し、上記のような手法を隠し変数で使用してフォームの値を保持できる場所だと思います。
このアイデアはうまくいくと思いますか、それとも別の解決策を提示できますか?