OFBiz页面跳转时的请求参数
OFBiz在页面跳转时,由于处理机制问题,有些情况下,会将上一请求的POST参数导入到跳转页面,以下补丁尝试部分解决这一问题(未验证):
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
index 05fa98a84e..00f61da5fa 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
@@ -835,12 +835,12 @@ public final class RequestHandler {
// if the request has the save-last-view attribute set, save it now before the view can be rendered or other chain done so that the _LAST*
// session attributes will represent the previous request
if (nextRequestResponse.isSaveLastView()) {
- // Debug.logInfo("======save last view: " + session.getAttribute("_LAST_VIEW_NAME_"));
String lastViewName = (String) session.getAttribute("_LAST_VIEW_NAME_");
// Do not save the view if the last view is the same as the current view and saveCurrentView is false
if (!(!nextRequestResponse.isSaveCurrentView() && "view".equals(nextRequestResponse.getType()) && nextRequestResponse.getValue()
.equals(lastViewName))) {
- session.setAttribute("_SAVED_VIEW_NAME_", session.getAttribute("_LAST_VIEW_NAME_"));
+ Debug.logInfo("Saving last view: " + lastViewName, MODULE);
+ session.setAttribute("_SAVED_VIEW_NAME_", lastViewName);
session.setAttribute("_SAVED_VIEW_PARAMS_", session.getAttribute("_LAST_VIEW_PARAMS_"));
}
}
@@ -954,6 +954,11 @@ public final class RequestHandler {
viewName = nextRequestResponse.getValue();
}
if (urlParams != null) {
+ // Before overriding by urlParams, override all parameters as empty attributes.
+ for (Enumeration<String> name = request.getParameterNames(); name.hasMoreElements();) {
+ request.setAttribute(name.nextElement(), "");
+ }
+
for (Map.Entry<String, Object> urlParamEntry : urlParams.entrySet()) {
String key = urlParamEntry.getKey();
// Don't overwrite messages coming from the current event
@@ -1122,13 +1127,13 @@ public final class RequestHandler {
req.getSession().setAttribute("_LAST_VIEW_PARAMS_", paramMap);
if ("SAVED".equals(saveName)) {
- //Debug.logInfo("======save current view: " + view);
+ Debug.logInfo("Saving current view: " + view, MODULE);
req.getSession().setAttribute("_SAVED_VIEW_NAME_", view);
req.getSession().setAttribute("_SAVED_VIEW_PARAMS_", paramMap);
}
if ("HOME".equals(saveName)) {
- //Debug.logInfo("======save home view: " + view);
+ Debug.logInfo("Saving home view: " + view, MODULE);
req.getSession().setAttribute("_HOME_VIEW_NAME_", view);
req.getSession().setAttribute("_HOME_VIEW_PARAMS_", paramMap);
// clear other saved views