svn commit: r749959 - in /ofbiz/trunk: applications/ecommerce/webapp/ecommerce/WEB-INF/ framework/common/webcommon/WEB-INF/ framework/common/webcommon/includes/ framework/webapp/dtd/ framework/webapp/src/org/ofbiz/webapp/control/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r749959 - in /ofbiz/trunk: applications/ecommerce/webapp/ecommerce/WEB-INF/ framework/common/webcommon/WEB-INF/ framework/common/webcommon/includes/ framework/webapp/dtd/ framework/webapp/src/org/ofbiz/webapp/control/

jonesde
Author: jonesde
Date: Wed Mar  4 10:27:52 2009
New Revision: 749959

URL: http://svn.apache.org/viewvc?rev=749959&view=rev
Log:
Simple implementation of feature discussed on the mailing list to facilitate getting back to a view after some generic action, like schanging the locale which this commit has use the new feature as a test case; I'm not sure I like this approach, will send message to dev list about it

Modified:
    ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
    ofbiz/trunk/framework/common/webcommon/WEB-INF/common-controller.xml
    ofbiz/trunk/framework/common/webcommon/includes/listLocales.ftl
    ofbiz/trunk/framework/webapp/dtd/site-conf.xsd
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java

Modified: ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/controller.xml?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/controller.xml Wed Mar  4 10:27:52 2009
@@ -140,7 +140,7 @@
     <request-map uri="setSessionLocale">
         <security https="false" auth="false"/>
         <event type="java" path="org.ofbiz.common.CommonEvents" invoke="setSessionLocale"/>
-        <response name="success" type="view" value="main"/>
+        <response name="success" type="view-last" value="main"/>
         <response name="error" type="view" value="main"/>
     </request-map>
     

Modified: ofbiz/trunk/framework/common/webcommon/WEB-INF/common-controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/webcommon/WEB-INF/common-controller.xml?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/webcommon/WEB-INF/common-controller.xml (original)
+++ ofbiz/trunk/framework/common/webcommon/WEB-INF/common-controller.xml Wed Mar  4 10:27:52 2009
@@ -88,26 +88,20 @@
     </request-map>
 
     <!-- Common Mappings used for locales and timezones -->
+    <request-map uri="LookupLocales"><security https="true" auth="false"/><response name="success" type="view" value="LookupLocales" save-last-view="true"/></request-map>
     <request-map uri="setSessionLocale">
         <security https="true" auth="false"/>
         <event type="java" path="org.ofbiz.common.CommonEvents" invoke="setSessionLocale"/>
-        <response name="success" type="request" value="main"/>
+        <response name="success" type="view-last" value="main"/>
         <response name="error" type="request" value="main"/>
     </request-map>
+    <request-map uri="LookupTimezones"><security https="true" auth="false"/><response name="success" type="view" value="LookupTimezones"/></request-map>
     <request-map uri="setSessionTimeZone">
         <security https="true" auth="false"/>
         <event type="java" path="org.ofbiz.common.CommonEvents" invoke="setSessionTimeZone"/>
         <response name="success" type="request" value="main"/>
         <response name="error" type="request" value="main"/>
     </request-map>
-    <request-map uri="LookupLocales">
-        <security https="true" auth="false" />
-        <response name="success" type="view" value="LookupLocales" />
-    </request-map>
-    <request-map uri="LookupTimezones">
-        <security https="true" auth="false" />
-        <response name="success" type="view" value="LookupTimezones" />
-    </request-map>
 
     <!-- User preference mapping -->
     <request-map uri="setUserPreference">

Modified: ofbiz/trunk/framework/common/webcommon/includes/listLocales.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/webcommon/includes/listLocales.ftl?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/webcommon/includes/listLocales.ftl (original)
+++ ofbiz/trunk/framework/common/webcommon/includes/listLocales.ftl Wed Mar  4 10:27:52 2009
@@ -51,7 +51,7 @@
         </#if>
         <tr <#if altRow>class="alternate-row"</#if>>
             <td lang="${langAttr}" dir="${langDir}">
-                <a href="<@ofbizUrl>setSessionLocale</@ofbizUrl>?newLocale=${availableLocale.toString()}">${availableLocale.getDisplayName(availableLocale)}</a>
+                <a href="<@ofbizUrl>setSessionLocale</@ofbizUrl>?newLocale=${availableLocale.toString()}">${availableLocale.getDisplayName(availableLocale)} [${availableLocale.toString()}]</a>
             </td>
         </tr>
     </#list>

Modified: ofbiz/trunk/framework/webapp/dtd/site-conf.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/dtd/site-conf.xsd?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/dtd/site-conf.xsd (original)
+++ ofbiz/trunk/framework/webapp/dtd/site-conf.xsd Wed Mar  4 10:27:52 2009
@@ -217,9 +217,9 @@
         </xs:complexType>
     </xs:element>
     <xs:attributeGroup name="attlist.event">
-        <xs:attribute type="xs:string" name="type" use="required"/>
-        <xs:attribute type="xs:string" name="path"/>
-        <xs:attribute type="xs:string" name="invoke"/>
+        <xs:attribute name="type" type="xs:string" use="required"/>
+        <xs:attribute name="path" type="xs:string"/>
+        <xs:attribute name="invoke" type="xs:string"/>
         <xs:attribute name="global-transaction" default="true">
             <xs:simpleType>
                 <xs:restriction base="xs:token">
@@ -238,12 +238,13 @@
         </xs:complexType>
     </xs:element>
     <xs:attributeGroup name="attlist.response">
-        <xs:attribute type="xs:string" name="name" use="required"/>
+        <xs:attribute name="name" type="xs:string" use="required"/>
         <xs:attribute name="type" use="required">
             <xs:simpleType>
                 <xs:restriction base="xs:token">
                     <xs:enumeration value="none"/>
                     <xs:enumeration value="view"/>
+                    <xs:enumeration value="view-last"><xs:annotation><xs:documentation>Will use the view from the last request unless there is a saved from some previous request (using the save-last-view attribute).</xs:documentation></xs:annotation></xs:enumeration>
                     <xs:enumeration value="request"/>
                     <xs:enumeration value="request-redirect"/>
                     <xs:enumeration value="request-redirect-noparam"/>
@@ -251,7 +252,16 @@
                 </xs:restriction>
             </xs:simpleType>
         </xs:attribute>
-        <xs:attribute type="xs:string" name="value"/>
+        <xs:attribute name="value" type="xs:string"/>
+        <xs:attribute name="save-last-view" default="false">
+            <xs:annotation><xs:documentation>Saves the last (previous) request's view for future use, generally with the view-last type of response.</xs:documentation></xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
     </xs:attributeGroup>
     <xs:element name="redirect-parameter">
         <xs:annotation><xs:documentation>Adds a parameter with the given name to the redirect. Finds value in a request attribute if exists, or a request parameter if no attribute is found.</xs:documentation></xs:annotation>

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java Wed Mar  4 10:27:52 2009
@@ -425,12 +425,14 @@
         public String name;
         public String type;
         public String value;
+        public boolean saveLastView = false;
         public Map<String, String> redirectParameterMap = FastMap.newInstance();
         
         public RequestResponse(Element responseElement) {
             this.name = responseElement.getAttribute("name");
             this.type = responseElement.getAttribute("type");
             this.value = responseElement.getAttribute("value");
+            this.saveLastView = "true".equals(responseElement.getAttribute("save-last-view"));
             for (Element redirectParameterElement: UtilXml.childElementList(responseElement, "redirect-parameter")) {
                 String from = redirectParameterElement.getAttribute("from");
                 if (UtilValidate.isEmpty(from)) from = redirectParameterElement.getAttribute("name");

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=749959&r1=749958&r2=749959&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Wed Mar  4 10:27:52 2009
@@ -448,7 +448,14 @@
         
         if (Debug.verboseOn()) Debug.logVerbose("[Event Response Selected]  type=" + nextRequestResponse.type + ", value=" + nextRequestResponse.value + ", sessionId=" + UtilHttp.getSessionId(request), module);
 
-        // Handle the responses - chains/views
+        // ========== Handle the responses - chains/views ==========
+        
+        // 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.saveLastView) {
+            session.setAttribute("_SAVED_VIEW_NAME_", session.getAttribute("_LAST_VIEW_NAME_"));
+            session.setAttribute("_SAVED_VIEW_URL_PARAMS_", session.getAttribute("_LAST_VIEW_URL_PARAMS_"));
+        }
+        
         if (nextRequestResponse != null && "request".equals(nextRequestResponse.type)) {
             // chained request
             Debug.logInfo("[RequestHandler.doRequest]: Response is a chained request." + " sessionId=" + UtilHttp.getSessionId(request), module);
@@ -488,6 +495,28 @@
                 // check for an override view, only used if "success" = eventReturn
                 String viewName = (UtilValidate.isNotEmpty(overrideViewUri) && (eventReturn == null || "success".equals(eventReturn))) ? overrideViewUri : nextRequestResponse.value;
                 renderView(viewName, requestMap.securityExternalView, request, response);
+            } else if ("view-last".equals(nextRequestResponse.type)) {
+                if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a view." + " sessionId=" + UtilHttp.getSessionId(request), module);
+                
+                // check for an override view, only used if "success" = eventReturn
+                String viewName = (UtilValidate.isNotEmpty(overrideViewUri) && (eventReturn == null || "success".equals(eventReturn))) ? overrideViewUri : nextRequestResponse.value;
+                
+                // as a further override, look for the _SAVED and then _LAST session attributes
+                Map<String, Object> urlParams = null;
+                if (session.getAttribute("_SAVED_VIEW_NAME_") != null) {
+                    viewName = (String) session.getAttribute("_SAVED_VIEW_NAME_");
+                    urlParams = (Map<String, Object>) session.getAttribute("_SAVED_VIEW_URL_PARAMS_");
+                } else if (session.getAttribute("_LAST_VIEW_NAME_") != null) {
+                    viewName = (String) session.getAttribute("_LAST_VIEW_NAME_");
+                    urlParams = (Map<String, Object>) session.getAttribute("_LAST_VIEW_URL_PARAMS_");
+                }
+                if (urlParams != null) {
+                    for (Map.Entry<String, Object> urlParamEntry: urlParams.entrySet()) {
+                        request.setAttribute(urlParamEntry.getKey(), urlParamEntry.getValue());
+                    }
+                }
+                
+                renderView(viewName, requestMap.securityExternalView, request, response);
             } else if ("none".equals(nextRequestResponse.type)) {
                 // no view to render (meaning the return was processed by the event)
                 if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is handled by the event." + " sessionId=" + UtilHttp.getSessionId(request), module);
@@ -613,8 +642,13 @@
 
         if (Debug.verboseOn()) Debug.logVerbose("[Getting View Map]: " + view + " sessionId=" + UtilHttp.getSessionId(req), module);
 
-        // before mapping the view, set a session attribute so we know where we are
+        // before mapping the view, set a request attribute so we know where we are
         req.setAttribute("_CURRENT_VIEW_", view);
+        
+        // save the view in the session for the last view, plus the URL parameters Map; note that this is saved after the request/view processing has finished so when those run they will get the value from the previous request
+        Map<String, Object> queryStringParamMap = UtilHttp.getQueryStringOnlyParameterMap(req);
+        req.getSession().setAttribute("_LAST_VIEW_NAME_", view);
+        req.getSession().setAttribute("_LAST_VIEW_URL_PARAMS_", queryStringParamMap);
 
         ConfigXMLReader.ViewMap viewMap = (view == null ? null : getControllerConfig().viewMapMap.get(view));
         if (viewMap == null) {