diff --git a/source/java/org/alfresco/web/app/Application.java b/source/java/org/alfresco/web/app/Application.java index bfee708490..5084324ecd 100644 --- a/source/java/org/alfresco/web/app/Application.java +++ b/source/java/org/alfresco/web/app/Application.java @@ -237,6 +237,17 @@ public class Application WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)); } + /** + * Retrieves the configured login page for the application + * + * @param facesContext The faces context + * @return The configured login page or null if the configuration is missing + */ + public static String getLoginPage(FacesContext facesContext) + { + return getLoginPage(FacesContextUtils.getRequiredWebApplicationContext(facesContext)); + } + /** * Retrieves the configured login page for the application * diff --git a/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java index 20d5d07938..7f0399c7a5 100644 --- a/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java +++ b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java @@ -2,7 +2,6 @@ package org.alfresco.web.app.servlet.ajax; import java.io.IOException; import java.util.Enumeration; -import java.util.StringTokenizer; import javax.faces.context.FacesContext; import javax.servlet.ServletException; @@ -75,25 +74,21 @@ public class AjaxServlet extends BaseServlet AuthenticationStatus status = servletAuthenticate(request, response, false); if (status == AuthenticationStatus.Failure) { - throw new AlfrescoRuntimeException("Access Denied: User not authenticated"); + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, + "Access Denied: User not authenticated"); + return; } - uri = uri.substring(request.getContextPath().length()); - StringTokenizer t = new StringTokenizer(uri, "/"); - int tokenCount = t.countTokens(); - if (tokenCount < 3) + uri = uri.substring(request.getContextPath().length() + "/".length()); + final String[] tokens = uri.split("/"); + if (tokens.length < 3) { throw new AlfrescoRuntimeException("Servlet URL did not contain all required args: " + uri); } - - // skip the servlet name - t.nextToken(); - // retrieve the command from the URL - String commandName = t.nextToken(); - + String commandName = tokens[1]; // retrieve the binding expression from the URL - String expression = t.nextToken(); + String expression = tokens[2]; // setup the faces context FacesContext facesContext = FacesHelper.getFacesContext(request, response, getServletContext()); diff --git a/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java b/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java index b7c97d1c61..0296dec1e9 100644 --- a/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java +++ b/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java @@ -162,7 +162,8 @@ public class XFormsProcessor append(": '"). append(bundle.getString(k)). append("'"). - append(k.equals(BUNDLE_KEYS[BUNDLE_KEYS.length - 1]) ? "\n}" : ",\n"); + append(k.equals(BUNDLE_KEYS[BUNDLE_KEYS.length - 1]) ? "\n};" : ","). + append("\n"); } e.appendChild(result.createTextNode(js.toString())); diff --git a/source/test-resources/xforms/unit-tests/textarea-test/textarea-test.xsd b/source/test-resources/xforms/unit-tests/textarea-test/textarea-test.xsd index b3f1063704..36b99c9da1 100644 --- a/source/test-resources/xforms/unit-tests/textarea-test/textarea-test.xsd +++ b/source/test-resources/xforms/unit-tests/textarea-test/textarea-test.xsd @@ -1,10 +1,18 @@ - + + + + minimal + + + + diff --git a/source/web/scripts/ajax/xforms.js b/source/web/scripts/ajax/xforms.js index 5b621ed0df..ffe82c45d3 100644 --- a/source/web/scripts/ajax/xforms.js +++ b/source/web/scripts/ajax/xforms.js @@ -3719,11 +3719,18 @@ AjaxHelper.createRequest = function(target, serverMethod, methodArgs, load, erro { AjaxHelper._loadHandler(result); }); - result.error = error || function(type, e) + result.error = error || function(type, e, impl) { dojo.debug("error [" + type + "] " + e.message); - _show_error(document.createTextNode(e.message)); - AjaxHelper._loadHandler(this); + if (impl.status == 401) + { + document.getElementById("logout").onclick(); + } + else + { + _show_error(document.createTextNode(e.message)); + AjaxHelper._loadHandler(this); + } }; return result; }