Dennis Sinelnikov wrote:
> Ron,
> 
> Since code speaks thousand words :), I would love to see some sample
> code on what you're trying to do and how you did it.  If you're busy, no
> biggie, just trying to learn a new pattern...

:) yes, I am busy.

I will try to demonstrate it:

===============
INSTEAD of implementing the pager like this:

<span jwcid="@For" ... value="ognl:currentPageNumber">
  <a jwcid="@DirectLink" listener="listener:setPageNumber"
      disabled="ognl:pageNumber == currentPageNumber"
  >
    <span jwcid="@Insert" value="ognl:currentPageNumber">
    </span></a>
</span>

and using it like:

<div jwcid="@Pager" pageNumber="ognl:pageNumber" itemsPerPage="ognl:10"
itemCount="ognl:itemCount"></div>

================
THE NEW WAY is:

<span jwcid="@For" ... value="ognl:currentPageNumber">
  <a jwcid="@DirectLink" listener="listener:setPageNumber"
      disabled="ognl:pageNumber == currentPageNumber"
  >
  <span jwcid="@InvokeListener" listener="listener:updateOutParameters"
    parameters="ognl: { currentPageNumberString , currentPageNumber }"
  >
  </span>
  <span jwcid="@RenderBody"/>
</span>

and using it:

<div jwcid="@Pager" pageNumber="ognl:pageNumber" itemsPerPage="ognl:10"
itemCount="ognl:itemCount">
  <span jwcid="@RenderBlock" block="component:pagerLinkBlock"></span>
</div>

...

<div jwcid="[EMAIL PROTECTED]">
  <a jwcid="@DirectLink" listener="listener:setPageNumber"
      disabled="ognl:linkSelected" parameters="ognl:linkPageNumber"
  >
    <span jwcid="@Insert" value="ognl:linkText">
    </span></a>
</div>


to make this work I added to the pager:

@Parameter public abstract String getLinkText();
@Parameter public abstract int getLinkPageNumber();
@Parameter public abstract boolean isLinkSelected();

and

public void updateOutParameters(String text, int pageNum ) {
  setLinkText( text );
  setLinkPageNumber( pageNum );
  setLinkSelected( pageNum == getPageNumber();
}

Note that the pager does not only generate 1 2 3 links but also << and
>> links to move forward and back, so i need the linkText and can not
just use the page number as link text.

Further, an If was required inside the linkBlock because if the pageNum
is 0, I need to generate another link which will be the default link to
the page instead of a direct link, since page number 0 is probably
visited once the page is first accessed...

so it is:

<div jwcid="[EMAIL PROTECTED]">
  <span jwcid="@If" condition="ognl:linkPageNumber == 0">
    ... generate a link to the page, which will be "visited" anywayz
  </span>
  <span jwcid="@Else">

    <a jwcid="@DirectLink" listener="listener:setPageNumber"
        disabled="ognl:linkSelected" parameters="ognl:linkPageNumber"
    >
      <span jwcid="@Insert" value="ognl:linkText">
      </span></a>
  </span>
</div>

> 
> Thanks,
> Dennis
> 
> RonPiterman wrote:
>> andyhot wrote:
>>> Do you have to use direct links?
>>> They expose too much of the inner workings of tapestry - that's why
>>> they're not got for bookmarks as well...
>>
>> how is this possible if my component should be dropped in different
>> pages ?
>>
>> I found finally another solution:
>>
>> What I did is removed the link rendering from the pager, and delegated
>> it to its body.
>>
>> Added 3 out parameters: link text, link page and if selected.
>>
>> in the page I added as a body a renderBlog, in both pages the same
>> block, which contains the desired link. So both pagers render the same
>> link, thus do the same URls...
>>
>> Cheers,
>> Ron
>>
>>
>>>
>>> Anyway, can you code around this using ExternalLinks ?
>>>
>>>
>>> RonPiterman wrote:
>>>> I have a nice usability problem with direct links nested inside
>>>> components:
>>>>
>>>> I have a pager component, which takes an in-out "page" parameter.
>>>>
>>>> The pager component generates direct links, which invoke a listener in
>>>> the component with the page number as parameter.
>>>>
>>>> The listener calls the set method of the "page" parameter, thus
>>>> changing the page number.
>>>>
>>>> Now if I drop two instances of the pager component in a page, they
>>>> both generate different links, so visited pages can not be traced:
>>>>
>>>> if the user clicks "2" on the one pager, the url is:
>>>>
>>>> http://localhost:8080/bardtke/reg/Forum,$Pager.$DirectLink_1.sdirect?sp=1
>>>>
>>>>
>>>> on the other pager, the url is:
>>>>
>>>> http://localhost:8080/bardtke/reg/Forum,$Pager_0.$DirectLink_1.sdirect?sp=1
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> so if on pager 1 page 2 is marked as visited, on pager 1 it isn't :(
>>>>
>>>> Now thats a fine problem...
>>>>
>>>> Any idees ?
>>>>
>>>> Cheers,
>>>>
>>>> Ron
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to