Author: alexsmirnov
Date: 2007-10-29 21:07:16 -0400 (Mon, 29 Oct 2007)
New Revision: 3610
Added:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/lifecycle/PortalPhaseListener.java
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortalStateManager.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortletViewState.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ContextMap.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/FacesContextFactoryImpl.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java
trunk/extensions/portlet/src/main/resources/META-INF/faces-config.xml
Log:
Continue to implement JSR-301 bridge. Finish requrements from PLT 5.
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -76,11 +76,12 @@
throws BridgeException {
initRequest(request, response, Bridge.PortletPhase.ActionPhase);
FacesContext facesContext = getFacesContext(request, response);
+ PortletViewState windowState =
PortletStateHolder.getInstance(facesContext).getWindowState(facesContext);
+ request.setAttribute(Bridge.IS_POSTBACK_ATTRIBUTE, Boolean.valueOf(null !=
windowState.getViewId()));
try {
execute(facesContext);
facesContext.getApplication().getStateManager().saveSerializedView(facesContext);
- // TODO - save request scope variables and Faces Messages.
- PortletViewState windowState =
PortletStateHolder.getInstance(facesContext).getWindowState(facesContext);
+ // save request scope variables and Faces Messages.
windowState.saveMessages(facesContext);
windowState.saveBeans(facesContext);
// saveView(facesContext);
@@ -140,6 +141,7 @@
ajaxContext.getCommonAjaxParameters().put(
AbstractExternalContext.PORTLET_NAME_PARAMETER,
getPortletConfig().getPortletName());
PortletViewState windowState =
PortletStateHolder.getInstance(facesContext).getWindowState(facesContext);
+ request.setAttribute(Bridge.IS_POSTBACK_ATTRIBUTE, Boolean.valueOf(null !=
windowState.getViewId()));
windowState.restoreMessages(facesContext);
windowState.restoreBeans(facesContext);
if(null == facesContext.getViewRoot()){
@@ -184,6 +186,7 @@
throw new BridgeDefaultViewNotSpecifiedException();
}
request.setAttribute(Bridge.PORTLET_LIFECYCLE_PHASE, actionPhase);
+ request.setAttribute(AbstractExternalContext.PORTLET_CONFIG_ATTRIBUTE,
getPortletConfig());
}
/**
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortalStateManager.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortalStateManager.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortalStateManager.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -46,4 +46,6 @@
// Client side view saving is not applicable for portal.
return false;
}
+
+
}
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortletViewState.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortletViewState.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/application/PortletViewState.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -10,10 +10,12 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
+import javax.faces.render.ResponseStateManager;
/**
* @author asmirnov
@@ -21,43 +23,68 @@
*/
public class PortletViewState implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 5630637804542426709L;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5630637804542426709L;
- public static final String SAVED_VIEW_ATTRIBUTE = PortletViewState.class
- .getName();
+ public static final String SAVED_VIEW_ATTRIBUTE = PortletViewState.class
+ .getName();
- private Map messages = new HashMap();
+ private static final Class[] excludedClasses = {
+ javax.portlet.PortletConfig.class,
+ javax.portlet.PortletContext.class,
+ javax.portlet.PortletRequest.class,
+ javax.portlet.PortletResponse.class,
+ javax.portlet.PortletSession.class,
+ javax.portlet.PortletPreferences.class,
+ javax.portlet.PortalContext.class,
+ javax.faces.context.FacesContext.class,
+ javax.faces.context.ExternalContext.class,
+ javax.servlet.ServletConfig.class,
+ javax.servlet.ServletContext.class,
+ javax.servlet.ServletRequest.class,
+ javax.servlet.ServletResponse.class,
+ javax.servlet.http.HttpSession.class };
- private Object treeStructure;
+ private static final String[] excludedRequestAttributes = {
+ "javax.servlet.include", ResponseStateManager.VIEW_STATE_PARAM };
- private Object componentsState;
+ public static final String REQUEST_PARAMETERS_ATTRIBUTE = PortletViewState.class
+ .getName()
+ + "REQUEST_PARAMS";
- private UIViewRoot viewRoot;
-
- private String viewId;
-
- private Map requestScopeBeans;
+ private Map<String, List> messages;
+ private Map<String, Object> beans;
- /**
+ private Object treeStructure;
+
+ private Object componentsState;
+
+ private UIViewRoot viewRoot;
+
+ private String viewId;
+
+ private Map requestScopeBeans;
+
+ private Map<String, String[]> _requestParameters;
+
+ /**
* @return the requestScopeBeans
*/
public Map getRequestScopeBeans() {
return requestScopeBeans;
}
-
/**
- * @param requestScopeBeans the requestScopeBeans to set
+ * @param requestScopeBeans
+ * the requestScopeBeans to set
*/
public void setRequestScopeBeans(Map requestScopeBeans) {
this.requestScopeBeans = requestScopeBeans;
}
-
/**
* @return the viewId
*/
@@ -65,138 +92,171 @@
return viewId;
}
-
/**
- * @param viewId the viewId to set
+ * @param viewId
+ * the viewId to set
*/
public void setViewId(String viewId) {
this.viewId = viewId;
}
-
/**
- * @param facesContext
- */
- public void saveMessages(FacesContext facesContext) {
- Iterator idsWithMessages = facesContext.getClientIdsWithMessages();
- while (idsWithMessages.hasNext()) {
- String id = (String) idsWithMessages.next();
- Iterator messages = facesContext.getMessages(id);
- while (messages.hasNext()) {
- FacesMessage message = (FacesMessage) messages.next();
- addMessage(id, message);
- }
+ * @param facesContext
+ */
+ public void saveMessages(FacesContext facesContext) {
+ messages = new HashMap<String, List>();
+ Iterator idsWithMessages = facesContext.getClientIdsWithMessages();
+ while (idsWithMessages.hasNext()) {
+ String id = (String) idsWithMessages.next();
+ Iterator messages = facesContext.getMessages(id);
+ while (messages.hasNext()) {
+ FacesMessage message = (FacesMessage) messages.next();
+ addMessage(id, message);
+ }
+ }
}
- }
+ /**
+ * @param facesContext
+ */
+ public void restoreMessages(FacesContext facesContext) {
+ if (null != messages) {
+ Iterator<String> idsWithMessages = getClientIdsWithMessages();
+ while (idsWithMessages.hasNext()) {
+ String id = idsWithMessages.next();
+ Iterator messages = getMessages(id);
+ while (messages.hasNext()) {
+ FacesMessage message = (FacesMessage) messages.next();
+ facesContext.addMessage(id, message);
+ }
+ }
- /**
- * @param facesContext
- */
- public void restoreMessages(FacesContext facesContext) {
- Iterator idsWithMessages = getClientIdsWithMessages();
- while (idsWithMessages.hasNext()) {
- String id = (String) idsWithMessages.next();
- Iterator messages = getMessages(id);
- while (messages.hasNext()) {
- FacesMessage message = (FacesMessage) messages.next();
- facesContext.addMessage(id, message);
- }
+ }
}
- }
- /**
- * @return the _messages
- */
- public Map getMessages() {
- return messages;
- }
+ /**
+ * @return the _messages
+ */
+ Map<String, List> getMessages() {
+ return messages;
+ }
- /**
- * @param _messages
- * the _messages to set
- */
- public void setMessages(Map _messages) {
- this.messages = _messages;
- }
+ /**
+ * @param _messages
+ * the _messages to set
+ */
+ private void setMessages(Map<String, List> _messages) {
+ this.messages = _messages;
+ }
- /**
- * @return the _viewRoot
- */
- public UIViewRoot getViewRoot() {
- return viewRoot;
- }
+ /**
+ * @return the _viewRoot
+ */
+ public UIViewRoot getViewRoot() {
+ return viewRoot;
+ }
- /**
- * @param root
- * the _viewRoot to set
- */
- public void setViewRoot(UIViewRoot root) {
- viewRoot = root;
- }
+ /**
+ * @param root
+ * the _viewRoot to set
+ */
+ public void setViewRoot(UIViewRoot root) {
+ viewRoot = root;
+ }
- public void addMessage(String clientId, FacesMessage message) {
- List list = (List) messages.get(clientId);
- if (list == null) {
- list = new ArrayList();
- messages.put(clientId, list);
+ private void addMessage(String clientId, FacesMessage message) {
+ List<FacesMessage> list = messages.get(clientId);
+ if (list == null) {
+ list = new ArrayList<FacesMessage>();
+ messages.put(clientId, list);
+ }
+ list.add(message);
}
- list.add(message);
- }
- public Iterator getClientIdsWithMessages() {
- return (messages.keySet().iterator());
- }
+ private Iterator<String> getClientIdsWithMessages() {
+ return (messages.keySet().iterator());
+ }
- public Iterator getMessages(String clientId) {
- List list = (List) messages.get(clientId);
- if (list != null) {
- return (list.iterator());
- } else {
- return (Collections.EMPTY_LIST.iterator());
+ private Iterator getMessages(String clientId) {
+ List list = messages.get(clientId);
+ if (list != null) {
+ return (list.iterator());
+ } else {
+ return (Collections.EMPTY_LIST.iterator());
+ }
}
- }
- /**
- * @return the componentsState
- */
- public Object getComponentsState() {
- return componentsState;
- }
+ /**
+ * @return the componentsState
+ */
+ public Object getComponentsState() {
+ return componentsState;
+ }
- /**
- * @param componentsState
- * the componentsState to set
- */
- public void setComponentsState(Object componentsState) {
- this.componentsState = componentsState;
- }
+ /**
+ * @param componentsState
+ * the componentsState to set
+ */
+ public void setComponentsState(Object componentsState) {
+ this.componentsState = componentsState;
+ }
- /**
- * @return the treeStructure
- */
- public Object getTreeStructure() {
- return treeStructure;
- }
+ /**
+ * @return the treeStructure
+ */
+ public Object getTreeStructure() {
+ return treeStructure;
+ }
- /**
- * @param treeStructure
- * the treeStructure to set
- */
- public void setTreeStructure(Object treeStructure) {
- this.treeStructure = treeStructure;
- }
+ /**
+ * @param treeStructure
+ * the treeStructure to set
+ */
+ public void setTreeStructure(Object treeStructure) {
+ this.treeStructure = treeStructure;
+ }
-
+ /**
+ * Save request-scope beans, as described in the JSR-301 5.1
+ *
+ * @param facesContext
+ */
public void saveBeans(FacesContext facesContext) {
- // TODO Auto-generated method stub
-
+ beans = null;
+ Map<String, Object> requestMap = facesContext.getExternalContext()
+ .getRequestMap();
+ for (Iterator<Entry<String, Object>> iterator = requestMap.entrySet()
+ .iterator(); iterator.hasNext();) {
+ Entry<String, Object> entry = iterator.next();
+ boolean include = true;
+ for (int i = 0; (i < excludedClasses.length) && include; i++) {
+ if (excludedClasses[i].isInstance(entry.getValue())) {
+ include = false;
+ }
+ }
+ for (int i = 0; (i < excludedRequestAttributes.length) && include; i++) {
+ if (entry.getKey().startsWith(excludedRequestAttributes[i])) {
+ include = false;
+ }
+ }
+ if (include) {
+ if (null == beans) {
+ beans = new HashMap<String, Object>();
+ }
+ beans.put(entry.getKey(), entry.getValue());
+ }
+ }
+ _requestParameters = facesContext.getExternalContext()
+ .getRequestParameterValuesMap();
}
-
public void restoreBeans(FacesContext facesContext) {
- // TODO Auto-generated method stub
-
+ Map<String, Object> requestMap = facesContext.getExternalContext()
+ .getRequestMap();
+ if (null != beans) {
+ requestMap.putAll(beans);
+ }
+ requestMap.put(REQUEST_PARAMETERS_ATTRIBUTE, _requestParameters);
}
}
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -96,6 +96,7 @@
public static final Object PORTLET_NAME_PARAMETER =
"org.ajax4jsf.portlet.NAME";
protected static final String[] EMPTY_STRING_ARRAY = new String[0];
+ public static final String PORTLET_CONFIG_ATTRIBUTE =
"org.ajax4jsf.portlet.CONFIG";
// TODO - optimization.
private Map applicationMap;
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ContextMap.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ContextMap.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ContextMap.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -28,6 +28,7 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.Map.Entry;
/**
*
@@ -114,10 +115,12 @@
throw new UnsupportedOperationException();
}
- // Unsupported by all Maps.
- public void putAll(Map t) {
- throw new UnsupportedOperationException();
- }
+// public void putAll(Map t) {
+// for (Iterator entries = t.entrySet().iterator(); entries.hasNext();) {
+// Map.Entry entry = (Entry) entries.next();
+// put(entry.getKey(),entry.getValue());
+// }
+// }
// Supported by maps if overridden
public Object remove(Object key) {
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/FacesContextFactoryImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/FacesContextFactoryImpl.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/FacesContextFactoryImpl.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -58,9 +58,13 @@
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
import javax.portlet.PortletContext;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -68,7 +72,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
/**
*
* @author shura Implementation of <code>FacesContextFactory</code> for
@@ -84,71 +87,85 @@
*
*/
public class FacesContextFactoryImpl extends FacesContextFactory {
- /**
- *
- * Hold <code>FacesContextFactory</code> from default
implementation.
- *
- */
-// private FacesContextFactory defaultFacesContextFactory;
+ /**
+ *
+ * Hold <code>FacesContextFactory</code> from default implementation.
+ *
+ */
+ // private FacesContextFactory defaultFacesContextFactory;
+ private static final Log _log = LogFactory
+ .getLog(FacesContextFactoryImpl.class);
- private static final Log _log = LogFactory.getLog(FacesContextFactoryImpl.class);
-
- /**
- *
- * Create instance of Faces context factory, based on implementation.
- *
- * @param defaultFactory -
- *
- * Factory from JSF implementation.
- *
- */
- public FacesContextFactoryImpl(/*FacesContextFactory defaultFactory*/) {
- super();
-// if (this.defaultFacesContextFactory == null) {
-// this.defaultFacesContextFactory = defaultFactory;
-// }
- if(_log.isDebugEnabled()){
- _log.debug("Portal - specific FacesContextFactory has initialised");
+ /**
+ *
+ * Create instance of Faces context factory, based on implementation.
+ *
+ * @param defaultFactory -
+ *
+ * Factory from JSF implementation.
+ *
+ */
+ public FacesContextFactoryImpl(/* FacesContextFactory defaultFactory */) {
+ super();
+ // if (this.defaultFacesContextFactory == null) {
+ // this.defaultFacesContextFactory = defaultFactory;
+ // }
+ if (_log.isDebugEnabled()) {
+ _log.debug("Portal - specific FacesContextFactory has initialised");
+ }
}
- }
- /*
- *
- * (non-Javadoc)
- *
- *
- *
- * @see
javax.faces.context.FacesContextFactory#getFacesContext(java.lang.Object,
- *
- * java.lang.Object, java.lang.Object, javax.faces.lifecycle.Lifecycle)
- *
- */
- public FacesContext getFacesContext(Object context, Object request,
- Object response, Lifecycle lifecycle) throws FacesException {
- if ((null == context) || (null == request) || (null == response)
- || (null == lifecycle)) {
- throw new NullPointerException(
- "One or more parameters for a faces context instantiation is null");
- }
- ExternalContext externalContext;
- if ((context instanceof PortletContext)
- && (request instanceof PortletRequest)
- && (response instanceof PortletResponse)) {
- externalContext = new PortletContextImpl((PortletContext)context,
(PortletRequest)request, (PortletResponse)response);
- if(_log.isDebugEnabled()){
- _log.debug("Portal request - create portal version of the
ExternalContext");
+ /*
+ *
+ * (non-Javadoc)
+ *
+ *
+ *
+ * @see javax.faces.context.FacesContextFactory#getFacesContext(java.lang.Object,
+ *
+ * java.lang.Object, java.lang.Object, javax.faces.lifecycle.Lifecycle)
+ *
+ */
+ public FacesContext getFacesContext(Object context, Object request,
+ Object response, Lifecycle lifecycle) throws FacesException {
+ if ((null == context) || (null == request) || (null == response)
+ || (null == lifecycle)) {
+ throw new NullPointerException(
+ "One or more parameters for a faces context instantiation is null");
}
- } else if ((context instanceof ServletContext)
- && (request instanceof HttpServletRequest)
- && (response instanceof HttpServletResponse)) {
- externalContext = new ServletContextImpl((ServletContext)context,
(HttpServletRequest)request, (HttpServletResponse)response);
- if(_log.isDebugEnabled()){
- _log.debug("Servlet request - create HttpServlet version of the
ExternalContext");
+ ExternalContext externalContext;
+ if ((context instanceof PortletContext)
+ && (request instanceof ActionRequest)
+ && (response instanceof ActionResponse)) {
+ externalContext = new PortletContextImpl((PortletContext) context,
+ (PortletRequest) request, (PortletResponse) response);
+ if (_log.isDebugEnabled()) {
+ _log
+ .debug("Portal request - create portal version of the ExternalContext for
action request");
+ }
+ } else if ((context instanceof PortletContext)
+ && (request instanceof RenderRequest)
+ && (response instanceof RenderResponse)) {
+ externalContext = new PortletRenderContextImpl((PortletContext) context,
+ (PortletRequest) request, (PortletResponse) response);
+ if (_log.isDebugEnabled()) {
+ _log
+ .debug("Portal request - create portal version of the ExternalContext for
render response");
+ }
+ } else if ((context instanceof ServletContext)
+ && (request instanceof HttpServletRequest)
+ && (response instanceof HttpServletResponse)) {
+ externalContext = new ServletContextImpl((ServletContext) context,
+ (HttpServletRequest) request,
+ (HttpServletResponse) response);
+ if (_log.isDebugEnabled()) {
+ _log
+ .debug("Servlet request - create HttpServlet version of the
ExternalContext");
+ }
+ } else {
+ throw new FacesException(
+ "Unsupported environment. Only servlet or portlet is allowed");
}
- } else {
- throw new FacesException(
- "Unsupported environment. Only servlet or portlet is allowed");
+ return new FacesContextImpl(externalContext, lifecycle);
}
- return new FacesContextImpl(externalContext, lifecycle);
- }
}
\ No newline at end of file
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java 2007-10-30
00:59:57 UTC (rev 3609)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -94,15 +94,15 @@
return null;
}
- private PortletContext getPortletContext() {
+ protected PortletContext getPortletContext() {
return (PortletContext) getContext();
}
- private PortletRequest getPortletRequest() {
+ protected PortletRequest getPortletRequest() {
return (PortletRequest) getRequest();
}
- private PortletResponse getPortletResponse() {
+ protected PortletResponse getPortletResponse() {
return (PortletResponse) getResponse();
}
@@ -115,8 +115,12 @@
if (getResponse() instanceof RenderResponse) {
namespace = ((RenderResponse) getResponse()).getNamespace();
} else {
- throw new IllegalStateException(
- "Portlet namespace not availible in processAction phase");
+ namespace = (String) getRequestParameter(
+ AbstractExternalContext.NAMESPACE_PARAMETER);
+ if(null == namespace){
+ throw new IllegalStateException(
+ "Can not determine portlet namespace");
+ }
}
}
return namespace;
Added:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
(rev 0)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -0,0 +1,87 @@
+/**
+ *
+ */
+package org.ajax4jsf.portlet.context;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.render.ResponseStateManager;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletResponse;
+import javax.portlet.faces.Bridge;
+
+import org.ajax4jsf.portlet.application.PortletViewState;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class PortletRenderContextImpl extends PortletContextImpl {
+
+ private Map<String, String[]> _requestParameters;
+
+ public PortletRenderContextImpl(PortletContext context,
+ PortletRequest request, PortletResponse response) {
+ super(context, request, response);
+ }
+
+ protected Object getRequestParameter(String name) {
+ Object[] values = (Object[]) getRequestParameterValues(name);
+ if (null != values) {
+ return values[0];
+ } else {
+ return null;
+ }
+ }
+
+ protected Enumeration enumerateRequestParameterNames() {
+ Map<String, String[]> requestParameters = getSavedRequestParameters();
+ if (null != requestParameters) {
+ return Collections.enumeration(requestParameters.keySet());
+ } else {
+ return Collections.enumeration(Collections.EMPTY_LIST);
+ }
+ }
+
+ /**
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ private Map<String, String[]> getSavedRequestParameters() {
+ if (null == _requestParameters) {
+ // Get parameters ( all or a View state only ) restored as requered in the JSR 301 PLT
5.1
+ Object preserveRequestAttr = Boolean.FALSE;
+ PortletConfig portletConfig = (PortletConfig)
getRequestAttribute(PORTLET_CONFIG_ATTRIBUTE);
+ if (null != portletConfig) {
+ String portletPreserveParamName = Bridge.PORTLET_ATTR_PREFIX
+ + portletConfig.getPortletName()
+ + Bridge.PRESERVE_ACTION_PARAM_ATTR_SUFFIX;
+ preserveRequestAttr = getRequestAttribute(portletPreserveParamName);
+ }
+ Map<String, String[]> parameters = (Map<String, String[]>)
getRequestAttribute(PortletViewState.REQUEST_PARAMETERS_ATTRIBUTE);
+ if (Boolean.TRUE.equals(preserveRequestAttr)) {
+ _requestParameters = parameters;
+ } else if (null != parameters){
+ _requestParameters = new HashMap<String, String[]>();
+ _requestParameters.put(ResponseStateManager.VIEW_STATE_PARAM,
parameters.get(ResponseStateManager.VIEW_STATE_PARAM));
+ }
+ }
+ return _requestParameters;
+ }
+
+ protected Object getRequestParameterValues(String name) {
+ Map<String, String[]> requestParameters = getSavedRequestParameters();
+ if (null != requestParameters) {
+ return requestParameters.get(name);
+ } else {
+ return null;
+ }
+ }
+
+}
Property changes on:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Date Revision Author
Added:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/lifecycle/PortalPhaseListener.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/lifecycle/PortalPhaseListener.java
(rev 0)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/lifecycle/PortalPhaseListener.java 2007-10-30
01:07:16 UTC (rev 3610)
@@ -0,0 +1,66 @@
+/**
+ *
+ */
+package org.ajax4jsf.portlet.lifecycle;
+
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.portlet.faces.Bridge;
+
+import org.ajax4jsf.portlet.application.PortletStateHolder;
+import org.ajax4jsf.portlet.application.PortletViewState;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class PortalPhaseListener implements PhaseListener {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4023885603543145666L;
+
+ /* (non-Javadoc)
+ * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
+ */
+ public void afterPhase(PhaseEvent event) {
+ PhaseId phaseId = event.getPhaseId();
+ FacesContext context = event.getFacesContext();
+ if(phaseId.equals(PhaseId.RESTORE_VIEW)){
+ Object portletPhase =
context.getExternalContext().getRequestMap().get(Bridge.PORTLET_LIFECYCLE_PHASE);
+ if(Bridge.PortletPhase.RenderPhase.equals(portletPhase)){
+ context.renderResponse();
+ }
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
+ */
+ public void beforePhase(PhaseEvent event) {
+ PhaseId phaseId = event.getPhaseId();
+ FacesContext context = event.getFacesContext();
+ if(phaseId.equals(PhaseId.RENDER_RESPONSE)){
+ Object portletPhase =
context.getExternalContext().getRequestMap().get(Bridge.PORTLET_LIFECYCLE_PHASE);
+ if(null == portletPhase){
+ // save request scope variables and Faces Messages.
+ PortletViewState windowState =
PortletStateHolder.getInstance(context).getWindowState(context);
+ windowState.saveMessages(context);
+ windowState.saveBeans(context);
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see javax.faces.event.PhaseListener#getPhaseId()
+ */
+ public PhaseId getPhaseId() {
+ // This listener process all phases.
+ return PhaseId.ANY_PHASE;
+ }
+
+}
Property changes on:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/lifecycle/PortalPhaseListener.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Date Revision Author
Modified: trunk/extensions/portlet/src/main/resources/META-INF/faces-config.xml
===================================================================
--- trunk/extensions/portlet/src/main/resources/META-INF/faces-config.xml 2007-10-30
00:59:57 UTC (rev 3609)
+++ trunk/extensions/portlet/src/main/resources/META-INF/faces-config.xml 2007-10-30
01:07:16 UTC (rev 3610)
@@ -3,29 +3,35 @@
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
- <application>
-
- </application>
- <factory>
-
<faces-context-factory>org.ajax4jsf.portlet.context.FacesContextFactoryImpl</faces-context-factory>
- </factory>
+ <application>
- <managed-bean>
- <managed-bean-name>ajaxContext</managed-bean-name>
-
<managed-bean-class>org.ajax4jsf.portlet.PortletAjaxContext</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
+ </application>
+ <factory>
+ <faces-context-factory>
+ org.ajax4jsf.portlet.context.FacesContextFactoryImpl
+ </faces-context-factory>
+ </factory>
+<lifecycle>
+
<phase-listener>org.ajax4jsf.portlet.lifecycle.PortalPhaseListener</phase-listener>
+</lifecycle>
+ <managed-bean>
+ <managed-bean-name>ajaxContext</managed-bean-name>
+ <managed-bean-class>
+ org.ajax4jsf.portlet.PortletAjaxContext
+ </managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
- <render-kit>
-
- <renderer>
- <description>
- override the viewroot
- </description>
- <component-family>javax.faces.ViewRoot</component-family>
- <renderer-type>org.ajax4jsf.portlet.ViewRoot</renderer-type>
-
<renderer-class>org.ajax4jsf.portlet.renderkit.portlet.PortletAjaxViewRootRenderer</renderer-class>
- </renderer>
- </render-kit>
-
+ <render-kit>
+
+ <renderer>
+ <description>override the viewroot</description>
+ <component-family>javax.faces.ViewRoot</component-family>
+ <renderer-type>org.ajax4jsf.portlet.ViewRoot</renderer-type>
+ <renderer-class>
+ org.ajax4jsf.portlet.renderkit.portlet.PortletAjaxViewRootRenderer
+ </renderer-class>
+ </renderer>
+ </render-kit>
+
</faces-config>