Fixed Tree in portals

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4920 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2007-01-24 16:10:36 +00:00
parent 55f7d1e4ef
commit 34cce408cc
4 changed files with 63 additions and 14 deletions

View File

@@ -93,15 +93,12 @@ public final class FacesHelper
*/ */
private static FacesContext getFacesContextImpl(Object request, Object response, Object context) private static FacesContext getFacesContextImpl(Object request, Object response, Object context)
{ {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext != null) return facesContext;
FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
// Doesn't set this instance as the current instance of FacesContext.getCurrentInstance // Doesn't set this instance as the current instance of FacesContext.getCurrentInstance
facesContext = contextFactory.getFacesContext(context, request, response, lifecycle); FacesContext facesContext = contextFactory.getFacesContext(context, request, response, lifecycle);
// Set using our inner class // Set using our inner class
InnerFacesContext.setFacesContextAsCurrent(facesContext); InnerFacesContext.setFacesContextAsCurrent(facesContext);

View File

@@ -16,12 +16,16 @@
*/ */
package org.alfresco.web.app.servlet.ajax; package org.alfresco.web.app.servlet.ajax;
import java.lang.annotation.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import javax.faces.FactoryFinder; import javax.faces.FactoryFinder;
import javax.faces.component.UIViewRoot; import javax.faces.component.UIViewRoot;
@@ -75,14 +79,10 @@ public class InvokeCommand extends BaseAjaxCommand
final HttpServletResponse response) final HttpServletResponse response)
throws ServletException, IOException throws ServletException, IOException
{ {
UserTransaction tx = null; UserTransaction tx = null;
ResponseWriter writer = null; ResponseWriter writer = null;
try try
{ {
final VariableResolver vr = facesContext.getApplication().getVariableResolver();
final int indexOfDot = expression.indexOf('.'); final int indexOfDot = expression.indexOf('.');
final String variableName = expression.substring(0, indexOfDot); final String variableName = expression.substring(0, indexOfDot);
final String methodName = expression.substring(indexOfDot + 1); final String methodName = expression.substring(indexOfDot + 1);
@@ -92,7 +92,38 @@ public class InvokeCommand extends BaseAjaxCommand
" on variable " + variableName + " on variable " + variableName +
" with method " + methodName); " with method " + methodName);
final Object bean = vr.resolveVariable(facesContext, variableName); // retrieve the managed bean, this is really weak but if the
// request comes from a portal server the bean we need to get
// is in the session with a prefix chosen by the portal vendor,
// to cover this scenario we have to go through the names of
// all the objects in the session to find the bean we want.
Object bean = null;
Enumeration enumNames = request.getSession().getAttributeNames();
while (enumNames.hasMoreElements())
{
String name = (String)enumNames.nextElement();
if (name.endsWith(variableName))
{
bean = request.getSession().getAttribute(name);
if (logger.isDebugEnabled())
logger.debug("Found bean " + bean + " in the session");
break;
}
}
// if we didn't find the bean it may be a request scope bean, in which
// case go through the variable resolver to create it.
if (bean == null)
{
VariableResolver vr = facesContext.getApplication().getVariableResolver();
bean = vr.resolveVariable(facesContext, variableName);
if (logger.isDebugEnabled())
logger.debug("Created bean " + bean + " via the variable resolver");
}
final Method method = bean.getClass().getMethod(methodName); final Method method = bean.getClass().getMethod(methodName);
final String responseMimetype = final String responseMimetype =
@@ -103,6 +134,7 @@ public class InvokeCommand extends BaseAjaxCommand
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
logger.debug("invoking method " + method + logger.debug("invoking method " + method +
" with repsonse mimetype " + responseMimetype); " with repsonse mimetype " + responseMimetype);
writer = this.setupResponseWriter(responseMimetype, writer = this.setupResponseWriter(responseMimetype,
response, response,
facesContext); facesContext);

View File

@@ -58,7 +58,6 @@ import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NoTransformerException; import org.alfresco.service.cmr.repository.NoTransformerException;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.web.app.Application; import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.DownloadContentServlet; import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.alfresco.web.app.servlet.ExternalAccessServlet; import org.alfresco.web.app.servlet.ExternalAccessServlet;
@@ -1305,6 +1304,12 @@ public final class Utils
out.write(context.getExternalContext().getRequestContextPath()); out.write(context.getExternalContext().getRequestContextPath());
out.write("/scripts/ajax/common.js\"> </script>\n"); out.write("/scripts/ajax/common.js\"> </script>\n");
// set the context path
out.write("<script type=\"text/javascript\">\n");
out.write("setContextPath('");
out.write(context.getExternalContext().getRequestContextPath());
out.write("');\n</script>\n");
// add marker to request // add marker to request
context.getExternalContext().getRequestMap().put(DOJO_SCRIPTS_WRITTEN, Boolean.TRUE); context.getExternalContext().getRequestMap().put(DOJO_SCRIPTS_WRITTEN, Boolean.TRUE);
} }
@@ -1353,6 +1358,12 @@ public final class Utils
out.write(context.getExternalContext().getRequestContextPath()); out.write(context.getExternalContext().getRequestContextPath());
out.write("/scripts/ajax/common.js\"> </script>\n"); out.write("/scripts/ajax/common.js\"> </script>\n");
// set the context path
out.write("<script type=\"text/javascript\">\n");
out.write("setContextPath('");
out.write(context.getExternalContext().getRequestContextPath());
out.write("');\n</script>\n");
// add marker to request // add marker to request
context.getExternalContext().getRequestMap().put(YAHOO_SCRIPTS_WRITTEN, Boolean.TRUE); context.getExternalContext().getRequestMap().put(YAHOO_SCRIPTS_WRITTEN, Boolean.TRUE);
} }

View File

@@ -32,6 +32,15 @@ function handleErrorYahoo(msg)
alert(msg); alert(msg);
} }
/**
* Sets the context path to use, useful for portals where
* the URL can be different from the app's context path.
*/
function setContextPath(contextPath)
{
_alfContextPath = contextPath;
}
/** /**
* Calculates and returns the context path for the current page * Calculates and returns the context path for the current page
*/ */