You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2010/11/30 16:52:14 UTC
svn commit: r1040590 - in /myfaces/extensions/cdi/trunk/jee-modules:
jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/
jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/
jsf-module/im...
Author: gpetracek
Date: Tue Nov 30 15:52:13 2010
New Revision: 1040590
URL: http://svn.apache.org/viewvc?rev=1040590&view=rev
Log:
EXTCDI-76 and first draft for EXTCDI-82
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/api/src/main/java/org/apache/myfaces/extensions/cdi/jsf/api/config/view/Page.java Tue Nov 30 15:52:13 2010
@@ -18,6 +18,8 @@
*/
package org.apache.myfaces.extensions.cdi.jsf.api.config.view;
+//import org.apache.myfaces.extensions.cdi.core.api.config.view.ViewConfig;
+
import javax.enterprise.inject.Stereotype;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@@ -49,6 +51,11 @@ public @interface Page
//TODO config for default navigation mode
NavigationMode navigation() default NavigationMode.DEFAULT;
+ ViewParameter viewParams() default ViewParameter.DEFAULT;
+
+ //TODO
+ //Class<? extends ViewConfig> sharedViewConfig() default ViewConfig.class;
+
public interface Extension
{
String XHTML = "xhtml";
@@ -61,4 +68,9 @@ public @interface Page
{
DEFAULT, FORWARD, REDIRECT
}
+
+ public enum ViewParameter
+ {
+ DEFAULT, INCLUDE, EXCLUDE
+ }
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java Tue Nov 30 15:52:13 2010
@@ -23,6 +23,9 @@ import org.apache.myfaces.extensions.cdi
import static org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCacheStore.*;
import static org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCacheStore.setDefaultErrorView;
+import java.util.Map;
+import java.util.Collection;
+
/**
* TODO move exceptions to util class
*
@@ -76,6 +79,13 @@ public class ViewConfigCache
return getViewIdToViewDefinitionEntryMapping().get(viewId);
}
+ public static Collection<ViewConfigEntry> getViewConfigEntries()
+ {
+ Map<String, ViewConfigEntry> entryMap = getViewIdToViewDefinitionEntryMapping();
+
+ return entryMap.values();
+ }
+
public static ViewConfigEntry getViewDefinition(Class<? extends ViewConfig> viewDefinitionClass)
{
return getViewDefinitionToViewDefinitionEntryMapping().get(viewDefinitionClass);
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigEntry.java Tue Nov 30 15:52:13 2010
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.core.api.provider.BeanManagerProvider;
import static org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils.getOrCreateScopedInstanceOfBeanByName;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.ViewParameter;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.PageBean;
import javax.inject.Named;
@@ -50,6 +51,7 @@ public class ViewConfigEntry
private final Class<? extends AccessDecisionVoter>[] accessDecisionVoters;
private final Class<? extends ViewConfig> customErrorView;
+ private ViewParameter viewParameter;
//meta-data
private List<Annotation> metaDataList;
@@ -60,6 +62,7 @@ public class ViewConfigEntry
public ViewConfigEntry(String viewId,
Class<? extends ViewConfig> viewDefinitionClass,
NavigationMode navigationMode,
+ ViewParameter viewParameter,
List<Class<? extends AccessDecisionVoter>> accessDecisionVoters,
Class<? extends ViewConfig> errorView,
List<Annotation> metaDataList)
@@ -67,6 +70,7 @@ public class ViewConfigEntry
this.viewId = viewId;
this.viewDefinitionClass = viewDefinitionClass;
this.navigationMode = navigationMode;
+ this.viewParameter = viewParameter;
this.metaDataList = metaDataList;
@@ -101,6 +105,11 @@ public class ViewConfigEntry
return navigationMode;
}
+ public ViewParameter getViewParameter()
+ {
+ return viewParameter;
+ }
+
List<PageBeanConfigEntry> getPageBeanDefinitions()
{
return beanDefinition;
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigExtension.java Tue Nov 30 15:52:13 2010
@@ -28,6 +28,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.ViewParameter;
import org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.ViewControllerInterceptor;
import javax.enterprise.event.Observes;
@@ -174,6 +175,9 @@ public class ViewConfigExtension impleme
NavigationMode defaultNavigationMode = NavigationMode.DEFAULT;
NavigationMode navigationMode = null;
+ ViewParameter defaultViewParameter = ViewParameter.DEFAULT;
+ ViewParameter viewParameter = null;
+
//security
List<Class<? extends AccessDecisionVoter>> foundVoters = new ArrayList<Class<? extends AccessDecisionVoter>>();
Class<? extends ViewConfig> errorView = null;
@@ -232,6 +236,11 @@ public class ViewConfigExtension impleme
navigationMode = pageAnnotation.navigation();
}
+ if(viewParameter == null && !pageAnnotation.viewParams().equals(defaultViewParameter))
+ {
+ viewParameter = pageAnnotation.viewParams();
+ }
+
if(!pageAnnotation.name().equals(defaultPageName))
{
pageName = pageAnnotation.name();
@@ -245,7 +254,12 @@ public class ViewConfigExtension impleme
{
navigationMode = defaultNavigationMode;
}
-
+
+ if(viewParameter == null)
+ {
+ viewParameter = defaultViewParameter;
+ }
+
StringBuilder viewId = new StringBuilder(basePath);
if(pageName.equals(""))
{
@@ -305,7 +319,7 @@ public class ViewConfigExtension impleme
result = ensureValidViewIds(result);
return new ViewConfigEntry(
- result, viewDefinitionClass, navigationMode, foundVoters, errorView, viewMetaDataList);
+ result, viewDefinitionClass, navigationMode, viewParameter, foundVoters, errorView, viewMetaDataList);
}
private String ensureValidViewIds(String result)
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/CodiNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -38,7 +38,7 @@ public class CodiNavigationHandler exten
if(isActivated())
{
ViewConfigAwareNavigationHandler viewConfigAwareNavigationHandler =
- new ViewConfigAwareNavigationHandler(navigationHandler);
+ new ViewConfigAwareNavigationHandler(navigationHandler, false);
this.wrapped = new AccessScopeAwareNavigationHandler(viewConfigAwareNavigationHandler);
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/navigation/ViewConfigAwareNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -25,9 +25,11 @@ import org.apache.myfaces.extensions.cdi
import static org.apache.myfaces.extensions.cdi.core.impl.util.SecurityUtils.invokeVoters;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page.NavigationMode;
import org.apache.myfaces.extensions.cdi.jsf.api.config.view.PreViewConfigNavigateEvent;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCache;
import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigEntry;
import static org.apache.myfaces.extensions.cdi.jsf.impl.util.SecurityUtils.tryToHandleSecurityViolation;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.JsfUtils;
import javax.faces.FacesException;
import javax.faces.application.NavigationHandler;
@@ -37,6 +39,7 @@ import javax.faces.context.ExternalConte
import javax.faces.context.FacesContext;
import javax.enterprise.inject.spi.BeanManager;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -51,12 +54,14 @@ public class ViewConfigAwareNavigationHa
private Map<String, ViewConfigEntry> viewConfigs = new ConcurrentHashMap<String, ViewConfigEntry>();
private NavigationHandler navigationHandler;
+ private boolean delegateCall;
private BeanManager beanManager;
- public ViewConfigAwareNavigationHandler(NavigationHandler navigationHandler)
+ public ViewConfigAwareNavigationHandler(NavigationHandler navigationHandler, boolean delegateCall)
{
this.navigationHandler = navigationHandler;
+ this.delegateCall = delegateCall;
}
@Override
@@ -111,7 +116,7 @@ public class ViewConfigAwareNavigationHa
entry = tryToUpdateEntry(entry, navigateEvent);
- if(entry != null) //entry might be null after the update
+ if(entry != null && !this.delegateCall) //entry might be null after the update
{
processViewDefinitionEntry(facesContext, entry);
@@ -119,6 +124,10 @@ public class ViewConfigAwareNavigationHa
this.navigationHandler.handleNavigation(facesContext, null, null);
return;
}
+ else if(entry != null)
+ {
+ outcome = convertEntryToOutcome(facesContext.getExternalContext(), entry);
+ }
}
}
}
@@ -126,6 +135,42 @@ public class ViewConfigAwareNavigationHa
this.navigationHandler.handleNavigation(facesContext, fromAction, outcome);
}
+ private String convertEntryToOutcome(ExternalContext externalContext, ViewConfigEntry entry)
+ {
+ boolean performRedirect = Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode());
+ boolean includeViewParameters = Page.ViewParameter.INCLUDE.equals(entry.getViewParameter());
+
+ StringBuilder result = new StringBuilder(entry.getViewId());
+
+ if(performRedirect)
+ {
+ result.append("?faces-redirect=true");
+ }
+ if(includeViewParameters)
+ {
+ if(performRedirect)
+ {
+ result.append("&");
+ }
+ else
+ {
+ result.append("?");
+ }
+ result.append("includeViewParams=true");
+
+ try
+ {
+ return JsfUtils.addRequestParameter(externalContext, result.toString());
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return result.toString();
+ }
+
private ViewConfigEntry tryToUpdateEntry(ViewConfigEntry viewConfigEntry, PreViewConfigNavigateEvent navigateEvent)
{
if(navigateEvent == null)
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultWindowHandler.java Tue Nov 30 15:52:13 2010
@@ -28,8 +28,6 @@ import javax.faces.context.ExternalConte
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -82,7 +80,7 @@ public class DefaultWindowHandler implem
if(addRequestParameter)
{
- url = addRequestParameter(externalContext, url);
+ url = JsfUtils.addRequestParameter(externalContext, url);
}
// call encodeActionURL() after all parameters have been added
@@ -91,27 +89,6 @@ public class DefaultWindowHandler implem
externalContext.redirect(url);
}
- protected String addRequestParameter(ExternalContext externalContext, String url)
- throws UnsupportedEncodingException
- {
- StringBuilder finalUrl = new StringBuilder(url);
-
- Map<String, String> requestParms = externalContext.getRequestParameterMap();
- for(Map.Entry<String, String> requestParam : requestParms.entrySet())
- {
- String key = requestParam.getKey();
-
- if(!url.contains(key + "="))
- {
- finalUrl.append("&");
- finalUrl.append(key);
- finalUrl.append("=");
- finalUrl.append(JsfUtils.encodeURLParameterValue(requestParam.getValue(), externalContext));
- }
- }
- return finalUrl.toString();
- }
-
//TODO add a counter in case of project stage dev
public String createWindowId()
{
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/JsfUtils.java Tue Nov 30 15:52:13 2010
@@ -32,6 +32,7 @@ import java.net.URLEncoder;
import java.util.Iterator;
import java.util.ResourceBundle;
import java.util.Locale;
+import java.util.Map;
/**
* keep in sync with extval!
@@ -124,4 +125,38 @@ public class JsfUtils
}
}
+ public static String addRequestParameter(ExternalContext externalContext, String url)
+ throws UnsupportedEncodingException
+ {
+ StringBuilder finalUrl = new StringBuilder(url);
+ boolean existingParameters = url.contains("?");
+
+ Map<String, String> requestParms = externalContext.getRequestParameterMap();
+ for(Map.Entry<String, String> requestParam : requestParms.entrySet())
+ {
+ String key = requestParam.getKey();
+
+ if("javax.faces.ViewState".equals(key))
+ {
+ continue;
+ }
+
+ if(!url.contains(key + "="))
+ {
+ if(!existingParameters)
+ {
+ finalUrl.append("?");
+ existingParameters = true;
+ }
+ else
+ {
+ finalUrl.append("&");
+ }
+ finalUrl.append(key);
+ finalUrl.append("=");
+ finalUrl.append(JsfUtils.encodeURLParameterValue(requestParam.getValue(), externalContext));
+ }
+ }
+ return finalUrl.toString();
+ }
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java Tue Nov 30 15:52:13 2010
@@ -19,6 +19,9 @@
package org.apache.myfaces.extensions.cdi.jsf2.impl.navigation;
import org.apache.myfaces.extensions.cdi.jsf.impl.navigation.ViewConfigAwareNavigationHandler;
+import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigCache;
+import org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewConfigEntry;
+import org.apache.myfaces.extensions.cdi.jsf.api.config.view.Page;
import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
@@ -29,6 +32,8 @@ import javax.faces.context.FacesContext;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
+import java.util.Collection;
+import java.util.HashSet;
/**
* We have to ensure the invocation order for the type-safe navigation feature/s.
@@ -39,7 +44,7 @@ public class CodiNavigationHandler exten
{
private final NavigationHandler wrapped;
private final boolean deactivated;
- private Map<String, Set<NavigationCase>> navigationCases;
+ private final boolean addViewConfigsAsNavigationCase = false; //TODO add config
public CodiNavigationHandler(NavigationHandler navigationHandler)
{
@@ -63,7 +68,7 @@ public class CodiNavigationHandler exten
private NavigationHandler getWrappedNavigationHandler()
{
ViewConfigAwareNavigationHandler viewConfigAwareNavigationHandler =
- new ViewConfigAwareNavigationHandler(this.wrapped);
+ new ViewConfigAwareNavigationHandler(this.wrapped, true);
return new AccessScopeAwareNavigationHandler(viewConfigAwareNavigationHandler);
}
@@ -80,17 +85,38 @@ public class CodiNavigationHandler exten
public Map<String, Set<NavigationCase>> getNavigationCases()
{
+ Map<String, Set<NavigationCase>> result = new HashMap<String, Set<NavigationCase>>();
+
if (this.wrapped instanceof ConfigurableNavigationHandler)
{
- return ((ConfigurableNavigationHandler) this.wrapped).getNavigationCases();
+ result.putAll(((ConfigurableNavigationHandler) this.wrapped).getNavigationCases());
+ }
+
+ if(!this.addViewConfigsAsNavigationCase || this.deactivated)
+ {
+ return result;
}
- //workaround for mojarra
- if(this.navigationCases == null)
+ Collection<ViewConfigEntry> viewConfigEntries = ViewConfigCache.getViewConfigEntries();
+
+ if(!viewConfigEntries.isEmpty())
{
- this.navigationCases = new HashMap<String, Set<NavigationCase>>();
+ Set<NavigationCase> navigationCase = new HashSet<NavigationCase>();
+ for(ViewConfigEntry entry : viewConfigEntries)
+ {
+ navigationCase.add(new NavigationCase("*",
+ null,
+ null,
+ null,
+ entry.getViewId(),
+ null,
+ Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
+ Page.ViewParameter.INCLUDE.equals(entry.getViewParameter())));
+
+ result.put(entry.getViewId(), navigationCase);
+ }
}
- return this.navigationCases;
+ return result;
}
public boolean isActivated()
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java?rev=1040590&r1=1040589&r2=1040590&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/ServerSideWindowHandler.java Tue Nov 30 15:52:13 2010
@@ -23,6 +23,7 @@ import org.apache.myfaces.extensions.cdi
import static org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager
.WINDOW_CONTEXT_ID_PARAMETER_KEY;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.DefaultWindowHandler;
+import org.apache.myfaces.extensions.cdi.jsf.impl.util.JsfUtils;
import javax.enterprise.inject.Alternative;
import javax.faces.context.ExternalContext;
@@ -73,7 +74,7 @@ public abstract class ServerSideWindowHa
if(addRequestParameter)
{
- url = addRequestParameter(externalContext, url);
+ url = JsfUtils.addRequestParameter(externalContext, url);
}
externalContext.redirect(url);