[seam-commits] Seam SVN: r7261 - in trunk: ui/src/main/java/org/jboss/seam/ui/component and 1 other directories.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Mon Jan 28 15:52:35 EST 2008
Author: pete.muir at jboss.org
Date: 2008-01-28 15:52:35 -0500 (Mon, 28 Jan 2008)
New Revision: 7261
Modified:
trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
trunk/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java
trunk/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java
trunk/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java
Log:
Initial work on portal compatibility from Alex Smirnov
Modified: trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
===================================================================
--- trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java 2008-01-28 14:06:34 UTC (rev 7260)
+++ trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java 2008-01-28 20:52:35 UTC (rev 7261)
@@ -151,18 +151,28 @@
FacesContext facesContext = event.getFacesContext();
- if ( event.getPhaseId() == RESTORE_VIEW || event.getPhaseId() == RENDER_RESPONSE )
+ boolean notInitialised=false;
+
+ if ( event.getPhaseId() == RESTORE_VIEW )
{
beforeRestoreView(facesContext);
}
+ if ( event.getPhaseId() == RENDER_RESPONSE && !Contexts.isApplicationContextActive() )
+ {
+ beforeRestoreView(facesContext);
+ notInitialised = true;
+ }
//delegate to subclass:
handleTransactionsBeforePhase(event);
- if ( event.getPhaseId() == RENDER_RESPONSE )
+ if (event.getPhaseId() == RENDER_RESPONSE)
{
- afterRestoreView(facesContext);
- beforeRenderResponse( event.getFacesContext() );
+ if (notInitialised)
+ {
+ afterRestoreView(facesContext);
+ }
+ beforeRenderResponse(event.getFacesContext());
}
}
@@ -242,46 +252,47 @@
private void afterPortletPhase(PhaseEvent event)
{
- FacesContext facesContext = event.getFacesContext();
-
- if ( event.getPhaseId() == RESTORE_VIEW )
+ Object portletPhase = event.getFacesContext().getExternalContext().getRequestMap().get("javax.portlet.faces.phase");
+
+ if (event.getPhaseId() == RESTORE_VIEW)
{
- afterRestoreView(facesContext);
+ afterRestoreView(event.getFacesContext());
}
- else if ( event.getPhaseId() == INVOKE_APPLICATION )
+ else if (event.getPhaseId() == INVOKE_APPLICATION)
{
afterInvokeApplication();
}
- else if ( event.getPhaseId() == PROCESS_VALIDATIONS )
+ else if (event.getPhaseId() == PROCESS_VALIDATIONS)
{
- afterProcessValidations(facesContext);
+ afterProcessValidations(event.getFacesContext());
}
-
+
FacesMessages.afterPhase();
-
- //delegate to subclass:
+
+ // delegate to subclass:
handleTransactionsAfterPhase(event);
-
- if ( event.getPhaseId() == RENDER_RESPONSE )
+
+ if (event.getPhaseId() == RENDER_RESPONSE)
{
- //writeConversationIdToResponse( facesContext.getExternalContext().getResponse() );
- afterRenderResponse(facesContext);
+ // writeConversationIdToResponse(
+ // facesContext.getExternalContext().getResponse() );
+ afterRenderResponse(event.getFacesContext());
}
- else if ( event.getPhaseId() == INVOKE_APPLICATION || facesContext.getRenderResponse() || facesContext.getResponseComplete() )
+ else if ( (null != portletPhase && "ActionPhase".equals(portletPhase.toString()) )
+ && (event.getPhaseId() == INVOKE_APPLICATION
+ || event.getFacesContext().getRenderResponse()
+ || event.getFacesContext().getResponseComplete()) )
{
- Manager manager = Manager.instance();
- manager.beforeRedirect();
- if ( manager.isLongRunningConversation() )
+ Manager.instance().beforeRedirect();
+ if ( Manager.instance().isLongRunningConversation() )
{
- setPortletRenderParameter(
- facesContext.getExternalContext().getResponse(),
- manager.getConversationIdParameter(),
- manager.getCurrentConversationId()
- );
+ setPortletRenderParameter(
+ event.getFacesContext().getExternalContext().getResponse(),
+ Manager.instance().getConversationIdParameter(),
+ Manager.instance().getCurrentConversationId() );
}
- afterResponseComplete(facesContext);
+ afterResponseComplete( event.getFacesContext() );
}
-
}
private static void setPortletRenderParameter(Object response, String conversationIdParameter, String conversationId)
Modified: trunk/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java
===================================================================
--- trunk/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java 2008-01-28 14:06:34 UTC (rev 7260)
+++ trunk/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java 2008-01-28 20:52:35 UTC (rev 7261)
@@ -13,6 +13,7 @@
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionListener;
+import javax.faces.event.PhaseEvent;
import javax.faces.model.DataModel;
import org.jboss.seam.navigation.Pages;
@@ -22,6 +23,17 @@
public abstract class UISeamCommandBase extends UIOutput implements ActionSource2
{
+ private static Class PORTLET_REQUEST;
+
+ static
+ {
+ try
+ {
+ PORTLET_REQUEST = Class.forName("javax.portlet.PortletRequest");
+ }
+ catch (Exception e) {}
+ }
+
public abstract String getView();
public String getUrl() throws UnsupportedEncodingException
@@ -34,7 +46,7 @@
viewId = Pages.getViewId(getFacesContext());
}
- ViewUrlBuilder url = new ViewUrlBuilder(viewId, getFragment());
+ ViewUrlBuilder url = new ViewUrlBuilder(viewId, getFragment(), !isPortletRequest(getFacesContext()));
Set<String> usedParameters = new HashSet<String>();
for (Object child : getChildren())
@@ -203,4 +215,10 @@
return new org.jboss.seam.ui.util.cdk.MethodExpressionToMethodBinding(getActionExpression());
}
+ private static boolean isPortletRequest(FacesContext facesContext)
+ {
+ return PORTLET_REQUEST !=null &&
+ PORTLET_REQUEST.isInstance( facesContext.getExternalContext().getRequest() );
+ }
+
}
Modified: trunk/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java
===================================================================
--- trunk/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java 2008-01-28 14:06:34 UTC (rev 7260)
+++ trunk/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java 2008-01-28 20:52:35 UTC (rev 7261)
@@ -16,6 +16,8 @@
private String fragment;
private String characterEncoding;
+ private boolean urlEncodeParameters = true;
+
private Map<String, String> parameters;
protected UrlBuilder(String fragment, String characterEncoding)
@@ -25,12 +27,24 @@
this.characterEncoding = characterEncoding;
}
+ public UrlBuilder(String fragment, String characterEncoding, boolean urlEncodeParameters)
+ {
+ this(fragment, characterEncoding);
+ this.urlEncodeParameters = urlEncodeParameters;
+ }
+
public UrlBuilder(String url, String fragment, String characterEncoding)
{
this(fragment, characterEncoding);
setUrl(url);
}
+ public UrlBuilder(String url, String fragment, String characterEncoding, boolean urlEncodeParameters)
+ {
+ this(url, fragment, characterEncoding);
+ this.urlEncodeParameters = urlEncodeParameters;
+ }
+
protected void setUrl(String url)
{
if (url == null)
@@ -85,7 +99,7 @@
public void addParameter(String name, String value) throws UnsupportedEncodingException
{
- parameters.put(name, urlEncode(value));
+ parameters.put(name, urlEncodeParameters ? urlEncode(value) : value);
}
public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
Modified: trunk/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java
===================================================================
--- trunk/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java 2008-01-28 14:06:34 UTC (rev 7260)
+++ trunk/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java 2008-01-28 20:52:35 UTC (rev 7261)
@@ -14,9 +14,9 @@
private Page page;
- public ViewUrlBuilder(String viewId, String fragment)
+ public ViewUrlBuilder(String viewId, String fragment, boolean urlEncodeParameters)
{
- super(fragment, FacesContext.getCurrentInstance().getResponseWriter().getCharacterEncoding());
+ super(fragment, FacesContext.getCurrentInstance().getResponseWriter().getCharacterEncoding(), urlEncodeParameters);
if (viewId == null)
{
throw new NullPointerException("viewId must not be null");
@@ -29,6 +29,12 @@
page = Pages.instance().getPage(viewId);
}
+
+ public ViewUrlBuilder(String viewId, String fragment)
+ {
+ this(viewId, fragment, true);
+
+ }
@Override
public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
More information about the seam-commits
mailing list