[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Sat Dec 16 21:39:17 EST 2006
User: gavin
Date: 06/12/16 21:39:17
Modified: src/main/org/jboss/seam/core Exceptions.java
Navigator.java Pages.java
Log:
params for redirects JBSEAM-180, yay
Revision Changes Path
1.19 +1 -1 jboss-seam/src/main/org/jboss/seam/core/Exceptions.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Exceptions.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Exceptions.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- Exceptions.java 17 Dec 2006 00:25:14 -0000 1.18
+++ Exceptions.java 17 Dec 2006 02:39:17 -0000 1.19
@@ -235,7 +235,7 @@
addFacesMessage( e, getMessage(e) );
if ( isEnd(e) ) Conversation.instance().end();
if ( isRollback(e) ) Transactions.setTransactionRollbackOnly();
- redirect( getViewId(e) );
+ redirect( getViewId(e), null );
return rethrow(e);
}
1.2 +4 -2 jboss-seam/src/main/org/jboss/seam/core/Navigator.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Navigator.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Navigator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- Navigator.java 17 Dec 2006 00:25:55 -0000 1.1
+++ Navigator.java 17 Dec 2006 02:39:17 -0000 1.2
@@ -1,5 +1,7 @@
package org.jboss.seam.core;
+import java.util.Map;
+
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
@@ -31,14 +33,14 @@
/**
* Redirect to the view id.
*/
- protected static void redirect(String viewId)
+ protected static void redirect(String viewId, Map<String, Object> parameters)
{
if ( Strings.isEmpty(viewId) )
{
viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
}
if ( log.isDebugEnabled() ) log.debug("redirecting to: " + viewId);
- Manager.instance().redirect(viewId);
+ Manager.instance().redirect(viewId, parameters, true);
}
/**
1.62 +54 -28 jboss-seam/src/main/org/jboss/seam/core/Pages.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Pages.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Pages.java,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -b -r1.61 -r1.62
--- Pages.java 17 Dec 2006 00:25:14 -0000 1.61
+++ Pages.java 17 Dec 2006 02:39:17 -0000 1.62
@@ -34,6 +34,7 @@
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.Expressions.MethodBinding;
import org.jboss.seam.core.Expressions.ValueBinding;
+import org.jboss.seam.core.Page.PageParameter;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.util.DTDEntityResolver;
@@ -288,11 +289,22 @@
Element redirect = element.element("redirect");
if (redirect!=null)
{
+ List<Element> children = redirect.elements("param");
+ final List<PageParameter> pageParameters = new ArrayList<PageParameter>();
+ for (Element child: children)
+ {
+ pageParameters.add( parsePageParameter(child) );
+ }
final String viewId = redirect.attributeValue("view-id");
caze.setResult(new Page.Result() {
public void navigate(FacesContext context)
{
- redirect(viewId);
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ for ( PageParameter pageParameter: pageParameters )
+ {
+ parameters.put( pageParameter.getName(), getParameterValue(context, pageParameter) );
+ }
+ redirect(viewId, parameters);
}
});
}
@@ -637,21 +649,40 @@
{
if ( !overridden.contains( pageParameter.getName() ) )
{
- ValueBinding valueBinding = pageParameter.getValueBinding();
- if (valueBinding==null)
- {
- Object value = Contexts.getPageContext().get( pageParameter.getName() );
+ Object value = getPageParameterValue(facesContext, pageParameter);
if (value!=null)
{
parameters.put( pageParameter.getName(), value );
}
}
+ }
+ }
+ return parameters;
+ }
+
+ private Object getPageParameterValue(FacesContext facesContext, Page.PageParameter pageParameter)
+ {
+ ValueBinding valueBinding = pageParameter.getValueBinding();
+ if (valueBinding==null)
+ {
+ return Contexts.getPageContext().get( pageParameter.getName() );
+ }
else
{
- Object value = valueBinding.getValue();
- if (value!=null)
+ return getParameterValue(facesContext, pageParameter);
+ }
+ }
+
+ private Object getParameterValue(FacesContext facesContext, Page.PageParameter pageParameter)
{
- Converter converter;
+ Object value = pageParameter.getValueBinding().getValue();
+ if (value==null)
+ {
+ return null;
+ }
+ else
+ {
+ Converter converter = null;
try
{
converter = pageParameter.getConverter();
@@ -659,18 +690,13 @@
catch (RuntimeException re)
{
//YUCK! due to bad JSF/MyFaces error handling
- continue;
+ return null;
}
- Object convertedValue = converter==null ?
+
+ return converter==null ?
value : converter.getAsString( facesContext, facesContext.getViewRoot(), value );
- parameters.put( pageParameter.getName(), convertedValue );
- }
}
}
- }
- }
- return parameters;
- }
/**
* Apply any page parameters passed as parameter values to the model.
More information about the jboss-cvs-commits
mailing list