[Jsf4portlets-devel] SF.net SVN: jsf4portlets: [21] trunk/src/main/java
Status: Alpha
Brought to you by:
alonsoft
From: <alo...@us...> - 2007-07-05 22:59:13
|
Revision: 21 http://jsf4portlets.svn.sourceforge.net/jsf4portlets/?rev=21&view=rev Author: alonsoft Date: 2007-07-05 15:59:10 -0700 (Thu, 05 Jul 2007) Log Message: ----------- Tracker Request: 1748340 Modified Paths: -------------- trunk/src/main/java/javax/portlet/faces/GenericFacesPortlet.java trunk/src/main/java/net/sf/jsf4portlets/BridgeImpl.java trunk/src/main/java/net/sf/jsf4portlets/context/ExternalContextImpl.java Modified: trunk/src/main/java/javax/portlet/faces/GenericFacesPortlet.java =================================================================== --- trunk/src/main/java/javax/portlet/faces/GenericFacesPortlet.java 2007-07-05 19:09:35 UTC (rev 20) +++ trunk/src/main/java/javax/portlet/faces/GenericFacesPortlet.java 2007-07-05 22:59:10 UTC (rev 21) @@ -6,6 +6,7 @@ import java.util.ResourceBundle; import java.util.logging.Logger; +import javax.faces.FacesException; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.Portlet; @@ -78,7 +79,19 @@ "processAction", new Object[]{ request, response }); storeViewIdParameter(request); - bridge.doFacesRequest(request, response); + try { + bridge.doFacesRequest(request, response); + } catch(FacesException e) { + Throwable t = e.getCause(); + if(t == null) { + throw new PortletException(e); + } else { + if(t instanceof IOException) { + throw ((IOException) t); + } + throw new PortletException(t); + } + } logger.exiting(GenericFacesPortlet.class.getName(), "processAction"); } @@ -89,7 +102,19 @@ "render", new Object[]{ request, response }); storeViewIdParameter(request); - bridge.doFacesRequest(request, response); + try { + bridge.doFacesRequest(request, response); + } catch(FacesException e) { + Throwable t = e.getCause(); + if(t == null) { + throw new PortletException(e); + } else { + if(t instanceof IOException) { + throw ((IOException) t); + } + throw new PortletException(t); + } + } logger.exiting(GenericFacesPortlet.class.getName(), "render"); } Modified: trunk/src/main/java/net/sf/jsf4portlets/BridgeImpl.java =================================================================== --- trunk/src/main/java/net/sf/jsf4portlets/BridgeImpl.java 2007-07-05 19:09:35 UTC (rev 20) +++ trunk/src/main/java/net/sf/jsf4portlets/BridgeImpl.java 2007-07-05 22:59:10 UTC (rev 21) @@ -20,10 +20,13 @@ */ package net.sf.jsf4portlets; +import java.util.Collections; import java.util.Enumeration; +import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.ResourceBundle; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -79,6 +82,21 @@ private static final String PREVIOUS_REQUEST_SCOPE = "net.sf.jsf4portlets.PREVIOUS_REQUEST_SCOPE"; + private static final Set<String> TRANSIENT_REQUEST_ATTRS; + + static { + Set<String> attrs = new HashSet<String>(); + attrs.add(BridgeConstants.AFTER_VIEW_CONTENT); + attrs.add(BridgeConstants.BRIDGE_PHASE); + attrs.add(BridgeConstants.DEFAULT_VIEW_ID); + attrs.add(BridgeConstants.ENCODE_REDIRECT_URL); + attrs.add(BridgeConstants.PORTLET_CONFIG); + attrs.add(BridgeConstants.PRESERVE_ACTION_PARAMS); + attrs.add(BridgeConstants.RENDER_AFTER_VIEW_CONTEXT); + attrs.add(BridgeConstants.REQUEST_SCOPE); + TRANSIENT_REQUEST_ATTRS = Collections.unmodifiableSet(attrs); + } + private PortletConfig portletConfig = null; private boolean encodeRedirectURL = false; @@ -140,6 +158,7 @@ logger.log(Level.FINEST, "J4P_000005", getPortletName()); try { + restore(context); getLifecycle().execute(context); save(context); logger.log(Level.FINEST, "J4P_000006", getPortletName()); @@ -266,56 +285,92 @@ ExternalContext extContext = context.getExternalContext(); PortletRequest request = (PortletRequest) extContext.getRequest(); - RequestScope scope = getPreviousRequestScope(request); - if(scope == null) { - return; - } - - logger.log(Level.FINER, "J4P_000017"); - Iterator<FacesMessage> messages; - Iterator<String> clientIds = scope.getClientIds(); - while(clientIds.hasNext()) { - String clientId = clientIds.next(); - messages = scope.getMessages(clientId); - while(messages.hasNext()) { - context.addMessage(clientId, messages.next()); + RequestScope scope = null; + BridgePhase phase = (BridgePhase) request.getAttribute( + BridgeConstants.BRIDGE_PHASE); + if(BridgePhase.ACTION_PHASE.equals(phase)) { + scope = new RequestScope(); + } else if(BridgePhase.RENDER_PHASE.equals(phase)) { + scope = getPreviousRequestScope(request); + if(scope == null) { + return; } - } - - logger.log(Level.FINER, "J4P_000018"); - PortletConfiguration config = PortletConfiguration.getInstance(extContext); - Enumeration<String> managedBeanNames = scope.getManagedBeanNames(); - while(managedBeanNames.hasMoreElements()) { - String name = managedBeanNames.nextElement(); - Object bean = scope.getManagedBean(name); - if(bean != null) { - ManagedBeanBean managedBean = config.getManagedBean(name); - assert managedBean != null; - - Map<String, Object> scopeMap = Util.getScopeMap( - extContext, managedBean.getScope()); - if(scopeMap == null) { - logger.log(Level.WARNING, "J4P_000013", managedBean.getScope()); - continue; + + Enumeration<String> attrNames = scope.getAttributeNames(); + while(attrNames.hasMoreElements()) { + String name = attrNames.nextElement(); + Object value = scope.getAttribute(name); + if(value != null) { + request.setAttribute(name, value); } - scopeMap.put(name, bean); } + + logger.log(Level.FINER, "J4P_000017"); + Iterator<FacesMessage> messages; + Iterator<String> clientIds = scope.getClientIds(); + while(clientIds.hasNext()) { + String clientId = clientIds.next(); + messages = scope.getMessages(clientId); + while(messages.hasNext()) { + context.addMessage(clientId, messages.next()); + } + } + + logger.log(Level.FINER, "J4P_000018"); + PortletConfiguration config = PortletConfiguration.getInstance(extContext); + Enumeration<String> managedBeanNames = scope.getManagedBeanNames(); + while(managedBeanNames.hasMoreElements()) { + String name = managedBeanNames.nextElement(); + Object bean = scope.getManagedBean(name); + if(bean != null) { + ManagedBeanBean managedBean = config.getManagedBean(name); + assert managedBean != null; + + Map<String, Object> scopeMap = Util.getScopeMap( + extContext, managedBean.getScope()); + if(scopeMap == null) { + logger.log(Level.WARNING, "J4P_000013", managedBean.getScope()); + continue; + } + scopeMap.put(name, bean); + } + } + + if(scope.getViewRoot() != null) { + context.setViewRoot(scope.getViewRoot()); + } } - if(scope.getViewRoot() != null) { - context.setViewRoot(scope.getViewRoot()); - } request.setAttribute(BridgeConstants.REQUEST_SCOPE, scope); } + @SuppressWarnings("unchecked") protected void save(FacesContext context) { - RequestScope scope = null; ExternalContext extContext = context.getExternalContext(); PortletRequest request = (PortletRequest) extContext.getRequest(); + RequestScope scope = (RequestScope) request.getAttribute( + BridgeConstants.REQUEST_SCOPE); BridgePhase phase = (BridgePhase) request.getAttribute( BridgeConstants.BRIDGE_PHASE); + if(BridgePhase.ACTION_PHASE.equals(phase)) { - scope = new RequestScope(); + PortletConfiguration config = PortletConfiguration.getInstance(extContext); + Enumeration<String> attrNames = request.getAttributeNames(); + while(attrNames.hasMoreElements()) { + String name = attrNames.nextElement(); + // transient attribues are initialized per portlet request + if(TRANSIENT_REQUEST_ATTRS.contains(name)) { + continue; + } + // we don't want to store request managed beans + if(config.getManagedBean(name) != null) { + continue; + } + Object value = request.getAttribute(name); + if(value != null) { + scope.setAttribute(name, value); + } + } logger.log(Level.FINER, "J4P_000014"); Iterator<FacesMessage> messages; @@ -329,7 +384,6 @@ } logger.log(Level.FINER, "J4P_000015"); - PortletConfiguration config = PortletConfiguration.getInstance(extContext); Enumeration<String> managedBeanNames = config.getManagedBeanNames(); while(managedBeanNames.hasMoreElements()) { String name = managedBeanNames.nextElement(); @@ -364,8 +418,6 @@ scope.setViewRoot(context.getViewRoot()); } else if(BridgePhase.RENDER_PHASE.equals(phase)) { - scope = (RequestScope) extContext.getRequestMap().get( - BridgeConstants.REQUEST_SCOPE); if(scope != null) { scope.setViewRoot(null); scope.setViewId(context.getViewRoot().getViewId()); Modified: trunk/src/main/java/net/sf/jsf4portlets/context/ExternalContextImpl.java =================================================================== --- trunk/src/main/java/net/sf/jsf4portlets/context/ExternalContextImpl.java 2007-07-05 19:09:35 UTC (rev 20) +++ trunk/src/main/java/net/sf/jsf4portlets/context/ExternalContextImpl.java 2007-07-05 22:59:10 UTC (rev 21) @@ -422,15 +422,20 @@ @Override public String getRequestPathInfo() { String viewId = null; - RequestScope requestScope = Util.getRequestScope(this); - if(requestScope != null) { - viewId = requestScope.getViewId(); + BridgePhase phase = (BridgePhase) request + .getAttribute(BridgeConstants.BRIDGE_PHASE); + if(BridgePhase.RENDER_PHASE.equals(phase)) { + RequestScope requestScope = Util.getRequestScope(this); + if(requestScope != null) { + viewId = requestScope.getViewId(); + } + } else if(BridgePhase.ACTION_PHASE.equals(phase)) { + if(viewId == null) { + viewId = getRequestParameterMap().get( + BridgeConstants.VIEW_ID_PARAMETER); + } } if(viewId == null) { - viewId = getRequestParameterMap().get( - BridgeConstants.VIEW_ID_PARAMETER); - } - if(viewId == null) { viewId = (String) getRequestMap().get( BridgeConstants.DEFAULT_VIEW_ID); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |