You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sk...@apache.org on 2008/01/03 22:57:10 UTC

svn commit: r608647 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces: application/jsp/JspViewHandlerImpl.java application/pss/PssJspViewHandlerImpl.java lifecycle/RestoreViewExecutor.java

Author: skitching
Date: Thu Jan  3 13:57:10 2008
New Revision: 608647

URL: http://svn.apache.org/viewvc?rev=608647&view=rev
Log:
Ensure suffix-replacement on URLs works right when the url contains dots, but not in the last part of the url (eg /foo.bar/baz).
See MYFACES-1798

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/pss/PssJspViewHandlerImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java?rev=608647&r1=608646&r2=608647&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java Thu Jan  3 13:57:10 2008
@@ -227,15 +227,16 @@
             DebugUtils.assertError(suffix.charAt(0) == '.',
                                    log, "Default suffix must start with a dot!");
             if (!viewId.endsWith(suffix)) {
-                int dot = viewId.lastIndexOf('.');
-                if (dot == -1) {
+                int slashPos = viewId.lastIndexOf('/');
+                int extensionPos = viewId.lastIndexOf('.');
+                if (extensionPos == -1 || extensionPos <= slashPos) {
                     if (log.isTraceEnabled())
                         log.trace("Current viewId has no extension, appending default suffix " + suffix);
                     viewId = viewId + suffix;
                 }
                 else {
                     if (log.isTraceEnabled()) log.trace("Replacing extension of current viewId by suffix " + suffix);
-                    viewId = viewId.substring(0, dot) + suffix;
+                    viewId = viewId.substring(0, extensionPos) + suffix;
                 }
                 facesContext.getViewRoot().setViewId(viewId);
             }
@@ -346,12 +347,14 @@
                     return viewId;
                 }
                 else {
-                    int idx = viewId.lastIndexOf(".");
-                    if (idx >= 0) {
-                        return viewId.substring(0, idx) + urlpattern;
+                    int slashPos = viewId.lastIndexOf('/');
+                    int extensionPos = viewId.lastIndexOf('.');
+                    
+                    if (extensionPos == -1 || extensionPos <= slashPos) {
+                        return viewId + urlpattern;
                     }
                     else {
-                        return viewId + urlpattern;
+                        return viewId.substring(0, extensionPos) + urlpattern;
                     }
 
                 }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/pss/PssJspViewHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/pss/PssJspViewHandlerImpl.java?rev=608647&r1=608646&r2=608647&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/pss/PssJspViewHandlerImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/pss/PssJspViewHandlerImpl.java Thu Jan  3 13:57:10 2008
@@ -180,8 +180,9 @@
                                    log, "Default suffix must start with a dot!");
             if (!viewId.endsWith(suffix))
             {
-                int dot = viewId.lastIndexOf('.');
-                if (dot == -1)
+                int slashPos = viewId.lastIndexOf('/');
+                int extensionPos = viewId.lastIndexOf('.');
+                if (extensionPos == -1 || extensionPos <= slashPos)
                 {
                     if (log.isTraceEnabled()) log.trace("Current viewId has no extension, appending default suffix " + suffix);
                     viewId = viewId + suffix;
@@ -189,7 +190,7 @@
                 else
                 {
                     if (log.isTraceEnabled()) log.trace("Replacing extension of current viewId by suffix " + suffix);
-                    viewId = viewId.substring(0, dot) + suffix;
+                    viewId = viewId.substring(0, extensionPos) + suffix;
                 }
                 facesContext.getViewRoot().setViewId(viewId);
             }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java?rev=608647&r1=608646&r2=608647&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java Thu Jan  3 13:57:10 2008
@@ -125,7 +125,7 @@
 
 		String viewId = externalContext.getRequestPathInfo(); // getPathInfo
 		if (viewId == null) {
-			// No extra path info found, so it is propably extension mapping
+			// No extra path info found, so it is probably extension mapping
 			viewId = externalContext.getRequestServletPath(); // getServletPath
 			DebugUtils.assertError(viewId != null, log,
 					"RequestServletPath is null, cannot determine viewId of current page.");
@@ -138,12 +138,13 @@
 			String suffix = defaultSuffix != null ? defaultSuffix : ViewHandler.DEFAULT_SUFFIX;
 			DebugUtils.assertError(suffix.charAt(0) == '.', log, "Default suffix must start with a dot!");
 
-			int dot = viewId.lastIndexOf('.');
-			if (dot == -1) {
+			int slashPos = viewId.lastIndexOf('/');
+			int extensionPos = viewId.lastIndexOf('.');
+			if (extensionPos == -1 || extensionPos <= slashPos) {
 				log.error("Assumed extension mapping, but there is no extension in " + viewId);
 				viewId = null;
 			} else {
-				viewId = viewId.substring(0, dot) + suffix;
+				viewId = viewId.substring(0, extensionPos) + suffix;
 			}
 		}