myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthias Wessendorf <mat...@apache.org>
Subject Re: svn commit: r813481 - in /myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html: HtmlLinkRendererBase.java HtmlOutcomeTargetButtonRendererBase.java HtmlRendererUtils.java
Date Wed, 30 Dec 2009 17:26:07 GMT
Hi Leo,

> ==============================================================================
> --- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
(original)
> +++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
Thu Sep 10 15:51:44 2009
> @@ -30,6 +30,10 @@
>  import org.apache.myfaces.shared.renderkit.html.util.JavascriptUtils;
>
>  import javax.faces.FacesException;
> +import javax.faces.application.ConfigurableNavigationHandler;
> +import javax.faces.application.NavigationCase;
> +import javax.faces.application.NavigationHandler;
> +import javax.faces.application.ViewHandler;
>  import javax.faces.component.*;
>  import javax.faces.component.behavior.ClientBehavior;
>  import javax.faces.component.behavior.ClientBehaviorHolder;
> @@ -1693,7 +1697,75 @@
>         return formInfo.getFormName() + NamingContainer.SEPARATOR_CHAR
>             + HIDDEN_COMMANDLINK_FIELD_NAME_MYFACES_OLD;
>     }
> +
> +    public static String getOutcomeTargetLinkHref (
> +            FacesContext facesContext, UIOutcomeTarget component) throws IOException
> +    {
> +        String fragment = (String) component.getAttributes().get ("fragment");
> +        String href = component.getOutcome();
> +        ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
> +
> +        // The href for an HtmlOutcomeTargetLink is outcome#fragment.
> +
> +        href = ((href == null) ? "" : href.trim());
> +
> +        // Get the correct URL for the outcome.
> +
> +        NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
> +        if (!(nh instanceof ConfigurableNavigationHandler))
> +        {
> +            throw new FacesException("navigation handler must be instance of ConfigurabeNavigationHandler
for use h:link or h:button");
> +        }
> +        ConfigurableNavigationHandler navigationHandler = (ConfigurableNavigationHandler)
nh;
> +
> +        //fromAction is null because there
> +        NavigationCase navigationCase = navigationHandler.getNavigationCase(facesContext,
null, href);
> +
> +        href = navigationCase.getToViewId(facesContext);

are you sure that "navigationCase" is never null here, in this case ?

-Matthias



> +
> +        if (fragment != null)
> +        {
> +            fragment = fragment.trim();
> +
> +            if (fragment.length() > 0)
> +            {
> +                href += "#" + fragment;
> +            }
> +        }
> +
> +        Map<String, List<String>> parameters = null;
> +
> +        for (Iterator it = component.getChildren().iterator(); it.hasNext(); )
> +        {
> +            UIComponent child = (UIComponent)it.next();
> +            if (child instanceof UIParameter)
> +            {
> +                String name = ((UIParameter)child).getName();
> +                Object value = ((UIParameter)child).getValue();
> +                if (parameters == null)
> +                {
> +                    parameters = new HashMap<String,List<String>>();
> +                }
> +                if (parameters.containsKey(name))
> +                {
> +                    parameters.get(name).add(value.toString());
> +                }
> +                else
> +                {
> +                    ArrayList<String> list = new ArrayList<String>(1);
> +                    list.add(value.toString());
> +                    parameters.put(name, list);
> +                }
> +            }
> +        }
>
> +        // In theory the precedence order to deal with params is this:
> +        // component parameters, navigation-case parameters, view parameters
> +        // getBookmarkableURL deal with this details.
> +        href = viewHandler.getBookmarkableURL(facesContext, href, parameters, component.isIncludeViewParams());
> +
> +        return href;
> +    }
>
>     private static String HTML_CONTENT_TYPE = "text/html";
>     private static String TEXT_ANY_CONTENT_TYPE = "text/*";
>
>
>



-- 
Matthias Wessendorf

blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf

Mime
View raw message