Index: core/src/com/icesoft/faces/context/BridgeExternalContext.java =================================================================== --- core/src/com/icesoft/faces/context/BridgeExternalContext.java (revision 17624) +++ core/src/com/icesoft/faces/context/BridgeExternalContext.java (working copy) @@ -359,22 +359,7 @@ } catch (URISyntaxException exception) { throw new RuntimeException(exception); } - final String redirectURI; - if (uri.isAbsolute()) { - redirectURI = uri.toString(); - } else { - String query = uri.getQuery(); - if (query == null) { - redirectURI = uri + "?rvn=" + viewIdentifier; - } else { - if (query.matches(".*rvn=.*")) { - redirectURI = uri.toString(); - } else { - redirectURI = uri + "&rvn=" + viewIdentifier; - } - } - } - redirector.redirect(redirectURI); + redirector.redirect(uri.toString()); // #3172 FacesContext may be null if we're currently logging out. FacesContext fc = FacesContext.getCurrentInstance(); if (fc != null) { Index: core/src/com/icesoft/faces/context/View.java =================================================================== --- core/src/com/icesoft/faces/context/View.java (revision 17624) +++ core/src/com/icesoft/faces/context/View.java (working copy) @@ -136,7 +136,7 @@ makeCurrent(); } - public void updateOnPageRequest(Request request) throws Exception { + private void updateOnPageRequest(Request request) throws Exception { acquireLifecycleLock(); request.detectEnvironment(new Request.Environment() { public void servlet(Object request, Object response) { @@ -272,6 +272,7 @@ } public void servePage(Request request) throws Exception { + updateOnPageRequest(request); request.respondWith(responseHandler); } Index: core/src/com/icesoft/faces/webapp/http/core/SingleViewServer.java =================================================================== --- core/src/com/icesoft/faces/webapp/http/core/SingleViewServer.java (revision 17624) +++ core/src/com/icesoft/faces/webapp/http/core/SingleViewServer.java (working copy) @@ -44,8 +44,6 @@ view = new View(viewNumber, sessionID, request, allUpdatedViews, configuration, sessionMonitor, resourceDispatcher, lifecycle); views.put(viewNumber, view); ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(viewNumber)); - } else { - view.updateOnPageRequest(request); } sessionMonitor.touchSession(); Index: core/src/com/icesoft/faces/webapp/http/core/MultiViewServer.java =================================================================== --- core/src/com/icesoft/faces/webapp/http/core/MultiViewServer.java (revision 17624) +++ core/src/com/icesoft/faces/webapp/http/core/MultiViewServer.java (working copy) @@ -38,27 +38,11 @@ public void service(Request request) throws Exception { //extract viewNumber if this request is from a redirect - View view; - if (request.containsParameter("rvn")) { - String redirectViewNumber = request.getParameter("rvn"); - //synchronize to atomically test and possibly put new View into the map - synchronized (views) { - view = (View) views.get(redirectViewNumber); - if (view == null) { - view = new View(redirectViewNumber, sessionID, request, asynchronouslyUpdatedViews, configuration, sessionMonitor, resourceDispatcher, lifecycle); - views.put(redirectViewNumber, view); - ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(redirectViewNumber)); - } else { - view.updateOnPageRequest(request); - } - } - } else { String viewNumber = String.valueOf(++viewCount); - view = new View(viewNumber, sessionID, request, asynchronouslyUpdatedViews, configuration, sessionMonitor, resourceDispatcher, lifecycle); + View view = new View(viewNumber, sessionID, request, asynchronouslyUpdatedViews, configuration, sessionMonitor, resourceDispatcher, lifecycle); views.put(viewNumber, view); - ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(viewNumber)); - } sessionMonitor.touchSession(); + ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(viewNumber)); view.servePage(request); view.release(); } Index: bridge/src/application.js =================================================================== --- bridge/src/application.js (revision 17624) +++ bridge/src/application.js (working copy) @@ -40,10 +40,6 @@ views.push(new Ice.Parameter.Association(session, view)); }; - var deregisterAllViews = function() { - views.clear(); - }; - var channel = new Ice.Ajax.Client(logger.child('dispose')); var sendDisposeViews = function(parameters) { if (parameters.isEmpty()) return; @@ -118,23 +114,11 @@ //replace ampersand entities incorrectly decoded by Safari 2.0.4 var url = element.getAttribute("url").replace(/&/g, "&"); logger.info('Redirecting to ' + url); - //avoid view disposal on navigation rules - if (url.contains('rvn=')) { - deregisterAllViews(); - } window.location.href = url; }); commandDispatcher.register('reload', function(element) { logger.info('Reloading'); - var url = window.location.href; - deregisterAllViews(); - if (url.contains('rvn=')) { window.location.reload(); - } else { - var view = element.getAttribute('view'); - var queryPrefix = url.contains('?') ? '&' : '?'; - window.location.href = url + queryPrefix + 'rvn=' + view; - } }); commandDispatcher.register('macro', function(message) { $enumerate(message.childNodes).each(function(subMessage) {