swapped in the RI;

It just renders this as text (instead of a link)

<h:link outcome="invalidOutcome">Blah Foo Bar </h:link>

=> <span>Blah Foo Bar</span>

This does not sound wrong :-)

.Matthias

On Wed, Dec 30, 2009 at 6:30 PM, Matthias Wessendorf <[email protected]> wrote:
> On Wed, Dec 30, 2009 at 6:26 PM, Matthias Wessendorf <[email protected]> 
> wrote:
>> 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 ?
>
> I have an <h:link outcome="foo"> where there is not foo.xhtml;
>
> -Matthias
>
>>
>> -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
>>
>
>
>
> --
> Matthias Wessendorf
>
> blog: http://matthiaswessendorf.wordpress.com/
> sessions: http://www.slideshare.net/mwessendorf
> twitter: http://twitter.com/mwessendorf
>



-- 
Matthias Wessendorf

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

Reply via email to