You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Alexander Wallace <aw...@rwmotloc.com> on 2007/11/29 19:16:31 UTC

how to use anchors # in outputLinks

Hi!

I'm developing portlets and the portal allows me to position the  
screen on a particular portlet using anchors... Like  
#p_my_particular_portlet ....

I have a portlet with links to other pages and I want to use the  
anchors to give focus to my_particular_portlet

When i do this in an outputLink in my faces ie:   / 
my_page#p_my_particular_portlet, myfaces turns the # into the html  
entity and the anchor is thusly broken... It won't give focus to my  
portlet... I've tried entering the html entity even but then an  
entity for the % is added too... So that doesn't work...

Has anyone been able to succesfully use # in urls in outputLinks?   
(i'm using myfaces 1.1.4 btw)

Thanks!


Re: how to use anchors # in outputLinks

Posted by Scott O'Bryan <da...@gmail.com>.
You'll just want to be careful, that won't always be the case.  It 
depends on the bridge and Portal implementation.  I'm not sure such a 
thing would work, for instance, on WebSphere or Pluto..

scott

Alexander Wallace wrote:
> Thank you very much... It does make sense...
>
> However, i just discovered that my developer was making a mistake and 
> passing the piece of text that had the # as a parameter to the 
> outputUrl tag, which as it should be expected, would get encoded...
>
> I hear what you are saying, and it must be that way according to 
> standards, but i can tell you that using Liferay 4.3.1 and MyFaces 
> 1.1.4, i can do this:
>
>                                 <h:outputLink value="#{result.url}">
>                                     <h:outputText value="go to another 
> page and focus on a particular portlet "/>
>                                 </h:outputLink>
>
> the #{result.url} returns a url to a different page (not where the 
> current portlet is at) and at the end it as #p_MyPortletInstanceId
>
> And it works... So... Maybe i didn't explain what I was attempting and 
> it falls outside of your tech explanation, or one of these two pieces 
> of software don't fully follow the standard...
>
> In any event, you made me actually look at what was happening and 
> illustrated me about the standard... and i now have what i need... so, 
> receive my sincere thanks for your time and help!
>
> On Nov 30, 2007, at 12:08 PM, Scott O'Bryan wrote:
>
>> :)  Technical information time.
>>
>> A JSR-168 portal environment does not allow you to construct 
>> "ActionURL's" with bookmark information inside.  It's impossible 
>> because the URL is generated by the Portal and there is no API to 
>> allow adding bookmark data.  Furthermore, modifying an actionURL 
>> after it's generated is forbidden by the Portal specification.
>>
>> JSF has an encodeActionURL method for which it takes servlet-like 
>> page references and tasks the bridge with somehow creating a real 
>> life portal compatible url with it.  The thing is, though, the 
>> ultimately faces is at the mercy of the underlying implementation.  
>> So the encodeActionURL cannot correctly translate urls that have 
>> bookmark references.  In order to allow JSF documents to work in both 
>> environments JSF components need to encode the action url or else a 
>> reference to another JSF page would not continue to be displayed in 
>> the portal because of the nature of the portal architecture.  
>> Therefore adding a URL via a JSF component, you must undergo this 
>> encoding process for things to work correctly.  When you write an 
>> anchor tag inside of a verbatum, neither the portal NOR faces touches 
>> that URL.  This is why it works.  But if you were to put a reference 
>> to a Faces page inside of that anchor tag, you would likely get your 
>> faces application displayed OUTSIDE of the portal altogether.  From a 
>> Faces standpoint, it is much better to allow these resources to stay 
>> in-container rather then support artifacts like bookmarks especially 
>> considering the bookmarks are not present on all portal containers.
>>
>> Does that make sense?
>>
>> Scott
>>
>> Alexander Wallace wrote:
>>> but if it is the portal, then it is only when it deals with JSF, cuz 
>>> if i put stuff outside of the jsf view, or inside of a <f:verbatim> 
>>> block, the anchor works just fine... Is that what you mean?
>>>
>>> On Nov 29, 2007, at 6:00 PM, Scott O'Bryan wrote:
>>>
>>>> More to the point, the PORTAL will change the #, not JSF.  If 
>>>> you're interested in a technical explanation let me know.  :)
>>>>
>>>> Scott
>>>>
>>>> Alexander Wallace wrote:
>>>>> I guess you are saying that JSF will change the # into 
>>>>> something... If i use a link out of JSF the anchor works fine... 
>>>>> I'll see about using verbatim or something around those lines then...
>>>>>
>>>>> thanks!
>>>>>
>>>>> On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:
>>>>>
>>>>>> Alex,
>>>>>>
>>>>>> Yeah, that's not going to work.  In the servlet case, what you 
>>>>>> are proposing does just fine, but in the portlet case, encoded 
>>>>>> url's actually turn into something entirely different and the 
>>>>>> bookmark (#) notation is not something that is supported by 
>>>>>> JSR168.  I would look at having your portlet use javascript to 
>>>>>> set focus on your portlet or recommend that people put fewer 
>>>>>> portlets on the screen at any given time.
>>>>>>
>>>>>> :)  Scott
>>>>>>
>>>>>> Alexander Wallace wrote:
>>>>>>> Hi!
>>>>>>>
>>>>>>> I'm developing portlets and the portal allows me to position the 
>>>>>>> screen on a particular portlet using anchors... Like 
>>>>>>> #p_my_particular_portlet ....
>>>>>>>
>>>>>>> I have a portlet with links to other pages and I want to use the 
>>>>>>> anchors to give focus to my_particular_portlet
>>>>>>>
>>>>>>> When i do this in an outputLink in my faces ie:   
>>>>>>> /my_page#p_my_particular_portlet, myfaces turns the # into the 
>>>>>>> html entity and the anchor is thusly broken... It won't give 
>>>>>>> focus to my portlet... I've tried entering the html entity even 
>>>>>>> but then an entity for the % is added too... So that doesn't 
>>>>>>> work...
>>>>>>>
>>>>>>> Has anyone been able to succesfully use # in urls in 
>>>>>>> outputLinks?  (i'm using myfaces 1.1.4 btw)
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Alexander Wallace <aw...@rwmotloc.com>.
Thank you very much... It does make sense...

However, i just discovered that my developer was making a mistake and  
passing the piece of text that had the # as a parameter to the  
outputUrl tag, which as it should be expected, would get encoded...

I hear what you are saying, and it must be that way according to  
standards, but i can tell you that using Liferay 4.3.1 and MyFaces  
1.1.4, i can do this:

                                 <h:outputLink value="#{result.url}">
                                     <h:outputText value="go to  
another page and focus on a particular portlet "/>
                                 </h:outputLink>

the #{result.url} returns a url to a different page (not where the  
current portlet is at) and at the end it as #p_MyPortletInstanceId

And it works... So... Maybe i didn't explain what I was attempting  
and it falls outside of your tech explanation, or one of these two  
pieces of software don't fully follow the standard...

In any event, you made me actually look at what was happening and  
illustrated me about the standard... and i now have what i need...  
so, receive my sincere thanks for your time and help!

On Nov 30, 2007, at 12:08 PM, Scott O'Bryan wrote:

> :)  Technical information time.
>
> A JSR-168 portal environment does not allow you to construct  
> "ActionURL's" with bookmark information inside.  It's impossible  
> because the URL is generated by the Portal and there is no API to  
> allow adding bookmark data.  Furthermore, modifying an actionURL  
> after it's generated is forbidden by the Portal specification.
>
> JSF has an encodeActionURL method for which it takes servlet-like  
> page references and tasks the bridge with somehow creating a real  
> life portal compatible url with it.  The thing is, though, the  
> ultimately faces is at the mercy of the underlying implementation.   
> So the encodeActionURL cannot correctly translate urls that have  
> bookmark references.  In order to allow JSF documents to work in  
> both environments JSF components need to encode the action url or  
> else a reference to another JSF page would not continue to be  
> displayed in the portal because of the nature of the portal  
> architecture.  Therefore adding a URL via a JSF component, you must  
> undergo this encoding process for things to work correctly.  When  
> you write an anchor tag inside of a verbatum, neither the portal  
> NOR faces touches that URL.  This is why it works.  But if you were  
> to put a reference to a Faces page inside of that anchor tag, you  
> would likely get your faces application displayed OUTSIDE of the  
> portal altogether.  From a Faces standpoint, it is much better to  
> allow these resources to stay in-container rather then support  
> artifacts like bookmarks especially considering the bookmarks are  
> not present on all portal containers.
>
> Does that make sense?
>
> Scott
>
> Alexander Wallace wrote:
>> but if it is the portal, then it is only when it deals with JSF,  
>> cuz if i put stuff outside of the jsf view, or inside of a  
>> <f:verbatim> block, the anchor works just fine... Is that what you  
>> mean?
>>
>> On Nov 29, 2007, at 6:00 PM, Scott O'Bryan wrote:
>>
>>> More to the point, the PORTAL will change the #, not JSF.  If  
>>> you're interested in a technical explanation let me know.  :)
>>>
>>> Scott
>>>
>>> Alexander Wallace wrote:
>>>> I guess you are saying that JSF will change the # into  
>>>> something... If i use a link out of JSF the anchor works fine...  
>>>> I'll see about using verbatim or something around those lines  
>>>> then...
>>>>
>>>> thanks!
>>>>
>>>> On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:
>>>>
>>>>> Alex,
>>>>>
>>>>> Yeah, that's not going to work.  In the servlet case, what you  
>>>>> are proposing does just fine, but in the portlet case, encoded  
>>>>> url's actually turn into something entirely different and the  
>>>>> bookmark (#) notation is not something that is supported by  
>>>>> JSR168.  I would look at having your portlet use javascript to  
>>>>> set focus on your portlet or recommend that people put fewer  
>>>>> portlets on the screen at any given time.
>>>>>
>>>>> :)  Scott
>>>>>
>>>>> Alexander Wallace wrote:
>>>>>> Hi!
>>>>>>
>>>>>> I'm developing portlets and the portal allows me to position  
>>>>>> the screen on a particular portlet using anchors... Like  
>>>>>> #p_my_particular_portlet ....
>>>>>>
>>>>>> I have a portlet with links to other pages and I want to use  
>>>>>> the anchors to give focus to my_particular_portlet
>>>>>>
>>>>>> When i do this in an outputLink in my faces ie:   / 
>>>>>> my_page#p_my_particular_portlet, myfaces turns the # into the  
>>>>>> html entity and the anchor is thusly broken... It won't give  
>>>>>> focus to my portlet... I've tried entering the html entity  
>>>>>> even but then an entity for the % is added too... So that  
>>>>>> doesn't work...
>>>>>>
>>>>>> Has anyone been able to succesfully use # in urls in  
>>>>>> outputLinks?  (i'm using myfaces 1.1.4 btw)
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Scott O'Bryan <da...@gmail.com>.
:)  Technical information time.

A JSR-168 portal environment does not allow you to construct 
"ActionURL's" with bookmark information inside.  It's impossible because 
the URL is generated by the Portal and there is no API to allow adding 
bookmark data.  Furthermore, modifying an actionURL after it's generated 
is forbidden by the Portal specification.

JSF has an encodeActionURL method for which it takes servlet-like page 
references and tasks the bridge with somehow creating a real life portal 
compatible url with it.  The thing is, though, the ultimately faces is 
at the mercy of the underlying implementation.  So the encodeActionURL 
cannot correctly translate urls that have bookmark references.  In order 
to allow JSF documents to work in both environments JSF components need 
to encode the action url or else a reference to another JSF page would 
not continue to be displayed in the portal because of the nature of the 
portal architecture.  Therefore adding a URL via a JSF component, you 
must undergo this encoding process for things to work correctly.  When 
you write an anchor tag inside of a verbatum, neither the portal NOR 
faces touches that URL.  This is why it works.  But if you were to put a 
reference to a Faces page inside of that anchor tag, you would likely 
get your faces application displayed OUTSIDE of the portal altogether.  
 From a Faces standpoint, it is much better to allow these resources to 
stay in-container rather then support artifacts like bookmarks 
especially considering the bookmarks are not present on all portal 
containers.

Does that make sense?

Scott

Alexander Wallace wrote:
> but if it is the portal, then it is only when it deals with JSF, cuz 
> if i put stuff outside of the jsf view, or inside of a <f:verbatim> 
> block, the anchor works just fine... Is that what you mean?
>
> On Nov 29, 2007, at 6:00 PM, Scott O'Bryan wrote:
>
>> More to the point, the PORTAL will change the #, not JSF.  If you're 
>> interested in a technical explanation let me know.  :)
>>
>> Scott
>>
>> Alexander Wallace wrote:
>>> I guess you are saying that JSF will change the # into something... 
>>> If i use a link out of JSF the anchor works fine... I'll see about 
>>> using verbatim or something around those lines then...
>>>
>>> thanks!
>>>
>>> On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:
>>>
>>>> Alex,
>>>>
>>>> Yeah, that's not going to work.  In the servlet case, what you are 
>>>> proposing does just fine, but in the portlet case, encoded url's 
>>>> actually turn into something entirely different and the bookmark 
>>>> (#) notation is not something that is supported by JSR168.  I would 
>>>> look at having your portlet use javascript to set focus on your 
>>>> portlet or recommend that people put fewer portlets on the screen 
>>>> at any given time.
>>>>
>>>> :)  Scott
>>>>
>>>> Alexander Wallace wrote:
>>>>> Hi!
>>>>>
>>>>> I'm developing portlets and the portal allows me to position the 
>>>>> screen on a particular portlet using anchors... Like 
>>>>> #p_my_particular_portlet ....
>>>>>
>>>>> I have a portlet with links to other pages and I want to use the 
>>>>> anchors to give focus to my_particular_portlet
>>>>>
>>>>> When i do this in an outputLink in my faces ie:   
>>>>> /my_page#p_my_particular_portlet, myfaces turns the # into the 
>>>>> html entity and the anchor is thusly broken... It won't give focus 
>>>>> to my portlet... I've tried entering the html entity even but then 
>>>>> an entity for the % is added too... So that doesn't work...
>>>>>
>>>>> Has anyone been able to succesfully use # in urls in outputLinks?  
>>>>> (i'm using myfaces 1.1.4 btw)
>>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Alexander Wallace <aw...@rwmotloc.com>.
but if it is the portal, then it is only when it deals with JSF, cuz  
if i put stuff outside of the jsf view, or inside of a <f:verbatim>  
block, the anchor works just fine... Is that what you mean?

On Nov 29, 2007, at 6:00 PM, Scott O'Bryan wrote:

> More to the point, the PORTAL will change the #, not JSF.  If  
> you're interested in a technical explanation let me know.  :)
>
> Scott
>
> Alexander Wallace wrote:
>> I guess you are saying that JSF will change the # into  
>> something... If i use a link out of JSF the anchor works fine...  
>> I'll see about using verbatim or something around those lines then...
>>
>> thanks!
>>
>> On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:
>>
>>> Alex,
>>>
>>> Yeah, that's not going to work.  In the servlet case, what you  
>>> are proposing does just fine, but in the portlet case, encoded  
>>> url's actually turn into something entirely different and the  
>>> bookmark (#) notation is not something that is supported by  
>>> JSR168.  I would look at having your portlet use javascript to  
>>> set focus on your portlet or recommend that people put fewer  
>>> portlets on the screen at any given time.
>>>
>>> :)  Scott
>>>
>>> Alexander Wallace wrote:
>>>> Hi!
>>>>
>>>> I'm developing portlets and the portal allows me to position the  
>>>> screen on a particular portlet using anchors... Like  
>>>> #p_my_particular_portlet ....
>>>>
>>>> I have a portlet with links to other pages and I want to use the  
>>>> anchors to give focus to my_particular_portlet
>>>>
>>>> When i do this in an outputLink in my faces ie:   / 
>>>> my_page#p_my_particular_portlet, myfaces turns the # into the  
>>>> html entity and the anchor is thusly broken... It won't give  
>>>> focus to my portlet... I've tried entering the html entity even  
>>>> but then an entity for the % is added too... So that doesn't  
>>>> work...
>>>>
>>>> Has anyone been able to succesfully use # in urls in  
>>>> outputLinks?  (i'm using myfaces 1.1.4 btw)
>>>>
>>>> Thanks!
>>>>
>>>>
>>>
>>>
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Scott O'Bryan <da...@gmail.com>.
More to the point, the PORTAL will change the #, not JSF.  If you're 
interested in a technical explanation let me know.  :)

Scott

Alexander Wallace wrote:
> I guess you are saying that JSF will change the # into something... If 
> i use a link out of JSF the anchor works fine... I'll see about using 
> verbatim or something around those lines then...
>
> thanks!
>
> On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:
>
>> Alex,
>>
>> Yeah, that's not going to work.  In the servlet case, what you are 
>> proposing does just fine, but in the portlet case, encoded url's 
>> actually turn into something entirely different and the bookmark (#) 
>> notation is not something that is supported by JSR168.  I would look 
>> at having your portlet use javascript to set focus on your portlet or 
>> recommend that people put fewer portlets on the screen at any given 
>> time.
>>
>> :)  Scott
>>
>> Alexander Wallace wrote:
>>> Hi!
>>>
>>> I'm developing portlets and the portal allows me to position the 
>>> screen on a particular portlet using anchors... Like 
>>> #p_my_particular_portlet ....
>>>
>>> I have a portlet with links to other pages and I want to use the 
>>> anchors to give focus to my_particular_portlet
>>>
>>> When i do this in an outputLink in my faces ie:   
>>> /my_page#p_my_particular_portlet, myfaces turns the # into the html 
>>> entity and the anchor is thusly broken... It won't give focus to my 
>>> portlet... I've tried entering the html entity even but then an 
>>> entity for the % is added too... So that doesn't work...
>>>
>>> Has anyone been able to succesfully use # in urls in outputLinks?  
>>> (i'm using myfaces 1.1.4 btw)
>>>
>>> Thanks!
>>>
>>>
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Alexander Wallace <aw...@rwmotloc.com>.
I guess you are saying that JSF will change the # into something...  
If i use a link out of JSF the anchor works fine... I'll see about  
using verbatim or something around those lines then...

thanks!

On Nov 29, 2007, at 1:29 PM, Scott O'Bryan wrote:

> Alex,
>
> Yeah, that's not going to work.  In the servlet case, what you are  
> proposing does just fine, but in the portlet case, encoded url's  
> actually turn into something entirely different and the bookmark  
> (#) notation is not something that is supported by JSR168.  I would  
> look at having your portlet use javascript to set focus on your  
> portlet or recommend that people put fewer portlets on the screen  
> at any given time.
>
> :)  Scott
>
> Alexander Wallace wrote:
>> Hi!
>>
>> I'm developing portlets and the portal allows me to position the  
>> screen on a particular portlet using anchors... Like  
>> #p_my_particular_portlet ....
>>
>> I have a portlet with links to other pages and I want to use the  
>> anchors to give focus to my_particular_portlet
>>
>> When i do this in an outputLink in my faces ie:   / 
>> my_page#p_my_particular_portlet, myfaces turns the # into the html  
>> entity and the anchor is thusly broken... It won't give focus to  
>> my portlet... I've tried entering the html entity even but then an  
>> entity for the % is added too... So that doesn't work...
>>
>> Has anyone been able to succesfully use # in urls in outputLinks?   
>> (i'm using myfaces 1.1.4 btw)
>>
>> Thanks!
>>
>>
>
>


Re: how to use anchors # in outputLinks

Posted by Scott O'Bryan <da...@gmail.com>.
Alex,

Yeah, that's not going to work.  In the servlet case, what you are 
proposing does just fine, but in the portlet case, encoded url's 
actually turn into something entirely different and the bookmark (#) 
notation is not something that is supported by JSR168.  I would look at 
having your portlet use javascript to set focus on your portlet or 
recommend that people put fewer portlets on the screen at any given time.

:)  Scott

Alexander Wallace wrote:
> Hi!
>
> I'm developing portlets and the portal allows me to position the 
> screen on a particular portlet using anchors... Like 
> #p_my_particular_portlet ....
>
> I have a portlet with links to other pages and I want to use the 
> anchors to give focus to my_particular_portlet
>
> When i do this in an outputLink in my faces ie:   
> /my_page#p_my_particular_portlet, myfaces turns the # into the html 
> entity and the anchor is thusly broken... It won't give focus to my 
> portlet... I've tried entering the html entity even but then an entity 
> for the % is added too... So that doesn't work...
>
> Has anyone been able to succesfully use # in urls in outputLinks?  
> (i'm using myfaces 1.1.4 btw)
>
> Thanks!
>
>