Yes - don't use a simple attribute modifier.  Use an
"AttributeModifier" that takes a model.  Return the URL in the model.

pseudo code:

container.add(new AttributeModifier("value", true, new
AbstractReadOnlyModel<CharSequence>()) {
  public CharSequence getObject() {
    return getRequestCycle().urlFor(dlink, ILinkListener.INTERFACE));
  }
});

You're trying to get the URL before the page is constructed / added to
page map - as the error mentions.  This delays the URL retrieval until
render time.

--
Jeremy Thomerson
http://www.wickettraining.com




On Fri, Jun 12, 2009 at 4:35 AM, Bas Vroling<bvrol...@cmbi.ru.nl> wrote:
> Thanks, I looked at the source and did the following:
>
> public JalViewPanel(String id, DefaultMutableTreeNode treeNode) {
>                super(id);
>                activeNode = treeNode;
>
>                dlink = new DownloadLink("downloadMsf",
> currentJalviewAlignment) {
>                       �...@override
>                        public void onClick() {
>                                String alignment = (String)
> currentJalviewAlignment.getObject();
>                                byte[] bytes = alignment.getBytes();
>
>                                getRequestCycle().setRequestTarget(
>                                                new
> AlignmentRequestTarget(bytes, "alignment.fasta"));
>                        }
>                };
>
>                add(dlink);
>
>                WebMarkupContainer container = new
> WebMarkupContainer("filename");
>                SimpleAttributeModifier modifier = new
> SimpleAttributeModifier("value",
>                                getRequestCycle().urlFor(dlink,
> ILinkListener.INTERFACE));
>                container.add(modifier);
>                add(container);
>        }
>
> the " getRequestCycle().urlFor(dlink, ILinkListener.INTERFACE) " part works,
> when I put this is a label it renders the correct url which if i paste it in
> the address bar goes to download the file.
> However, in the way it is now wicket throws an IllegalStateException:
>
> java.lang.IllegalStateException: No Page found for component
> [MarkupContainer [Component id = downloadMsf]]
>
> Any ideas?
>
>
>
> On 11 Jun, at 23:23, Jeremy Thomerson wrote:
>
>> Look at the source - it has getURL which is a protected method.  If
>> you really can't figure out how to use urlFor(...) from the source -
>> then override getURL as such:
>>
>> public CharSequence getURL() {
>> return super.getURL();
>> }
>>
>> Make it public and use it to get the URL.  You can ascertain all of
>> this from the source.
>>
>>
>> --
>> Jeremy Thomerson
>> http://www.wickettraining.com
>>
>>
>>
>>
>> On Thu, Jun 11, 2009 at 4:18 AM, Bas Vroling<bvrol...@cmbi.ru.nl> wrote:
>>>
>>> So does anyone have an idea how to fix this?
>>>
>>>
>>> On 10 Jun, at 12:42, Bas Vroling wrote:
>>>
>>>> Thanks for the extensive feedback, but urlFor() does not accept that as
>>>> input...
>>>> I tried being smart and did this (please correct me if this is
>>>> nonsense):
>>>>
>>>> add(new WebMarkupContainer("filename").add(new SimpleAttributeModifier(
>>>>                               "value",
>>>> dlink.urlFor(ILinkListener.INTERFACE))));
>>>>
>>>> when I access the pages it gives the following error:
>>>>
>>>> java.lang.IllegalStateException: No Page found for component
>>>> [MarkupContainer [Component id = downloadMsf]]
>>>>   at org.apache.wicket.Component.getPage(Component.java:1755)
>>>>
>>>> although the component is added to the panel. Here's the complete code:
>>>>
>>>> public JalViewPanel(String id, DefaultMutableTreeNode treeNode) {
>>>>               super(id);
>>>>               activeNode = treeNode;
>>>>
>>>>               DownloadLink dlink = new DownloadLink("downloadMsf",
>>>> currentJalviewAlignment) {
>>>>                       @Override
>>>>                       public void onClick() {
>>>>                               String alignment = (String)
>>>> currentJalviewAlignment.getObject();
>>>>                               byte[] bytes = alignment.getBytes();
>>>>                               getRequestCycle().setRequestTarget(new
>>>> AlignmentRequestTarget(bytes, "alignment.fasta"));
>>>>                       }
>>>>               };
>>>>
>>>>               add(dlink);
>>>>               add(new WebMarkupContainer("filename").add(new
>>>> SimpleAttributeModifier(
>>>>                               "value",
>>>> dlink.urlFor(ILinkListener.INTERFACE))));
>>>>       }
>>>>
>>>> On 10 Jun, at 12:10, Martijn Dashorst wrote:
>>>>
>>>>> You could always look at the source for how Link does it: getURL()
>>>>> calls:
>>>>>
>>>>>       /**
>>>>>        * Gets the url to use for this link.
>>>>>        *
>>>>>        * @return The URL that this link links to
>>>>>        */
>>>>>       protected CharSequence getURL()
>>>>>       {
>>>>>               return urlFor(ILinkListener.INTERFACE);
>>>>>       }
>>>>>
>>>>> which calls:
>>>>>
>>>>> Component#urlFor(this, ILinkListener.INTERFACE)
>>>>>
>>>>> so you should call:
>>>>>
>>>>> urlFor(dlink, ILinkListener.INTERFACE)
>>>>>
>>>>> Martijn
>>>>>
>>>>> On Wed, Jun 10, 2009 at 11:59 AM, Bas Vroling<bvrol...@cmbi.ru.nl>
>>>>> wrote:
>>>>>>
>>>>>> I'm feeling not really smart here, but that doesn't work. urlFor needs
>>>>>> something like a irequesttarget. I tried something like this:
>>>>>>
>>>>>> add(new WebMarkupContainer("filename").add(new
>>>>>> SimpleAttributeModifier(
>>>>>>                             "value",
>>>>>> urlFor(dlink.getRequestCycle().getRequestTarget()))));
>>>>>>
>>>>>> but that gives me the url of the page, not the downloadlink.
>>>>>>
>>>>>> On 10 Jun, at 11:46, Martijn Dashorst wrote:
>>>>>>
>>>>>>> urlFor(dlink)?
>>>>>>>
>>>>>>> Martijn
>>>>>>>
>>>>>>> On Wed, Jun 10, 2009 at 11:27 AM, Bas Vroling<bvrol...@cmbi.ru.nl>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Ok, that is starting to work, thanks! Now I only need to get the url
>>>>>>>> in
>>>>>>>> the
>>>>>>>> simpleAttributeModifier. This doesn't accept models but needs a
>>>>>>>> CharSequence, which does seem logical but how do I get the actual
>>>>>>>> URL
>>>>>>>> of
>>>>>>>> the
>>>>>>>> dlink model in there?
>>>>>>>>
>>>>>>>> On 10 Jun, at 10:48, Martijn Dashorst wrote:
>>>>>>>>
>>>>>>>>> <param wicket:id="filename" />
>>>>>>>>>
>>>>>>>>> add(new WebMarkupContainer("filename").add(new
>>>>>>>>> SimpleAttributeModifier("value", ...)));
>>>>>>>>>
>>>>>>>>> On Wed, Jun 10, 2009 at 9:57 AM, Bas Vroling<bvrol...@cmbi.ru.nl>
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> If I set setRenderBodyOnly(true) it doesn't work either, and then
>>>>>>>>>> it
>>>>>>>>>> shouldn't complain anymore. (wicket is the one complaining, not
>>>>>>>>>> the
>>>>>>>>>> applet
>>>>>>>>>> btw)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 10 Jun, at 09:53, Dorothée Giernoth wrote:
>>>>>>>>>>
>>>>>>>>>>> b/c you can't put a tag into a tag ... as it says: it is a value
>>>>>>>>>>> and
>>>>>>>>>>> it
>>>>>>>>>>> needs a value, not a tag ... xml doesn't work that way
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> -----Ursprüngliche Nachricht-----
>>>>>>>>>>> Von: Bas Vroling [mailto:bvrol...@cmbi.ru.nl]
>>>>>>>>>>> Gesendet: Mittwoch, 10. Juni 2009 09:41
>>>>>>>>>>> An: users@wicket.apache.org
>>>>>>>>>>> Betreff: inserting urls in script variables
>>>>>>>>>>>
>>>>>>>>>>> Hi guys,
>>>>>>>>>>>
>>>>>>>>>>> I'm trying to insert a download url in a piece of template code.
>>>>>>>>>>> The
>>>>>>>>>>> template part looks like this:
>>>>>>>>>>>
>>>>>>>>>>> <wicket:panel>
>>>>>>>>>>>   <span wicket:id="familyName"></span>
>>>>>>>>>>>   <applet code="jalview.bin.JalviewLite" width="100%"
>>>>>>>>>>> height="750"
>>>>>>>>>>> archive="jalviewApplet.jar">
>>>>>>>>>>>           <param name="file" value="{{URL HERE}}">
>>>>>>>>>>>           <param name="embedded" value="true"/>
>>>>>>>>>>>           <param name="showFullId" value="false"/>
>>>>>>>>>>>   </applet>
>>>>>>>>>>> </wicket:panel>
>>>>>>>>>>>
>>>>>>>>>>> The applet show a multiple sequence alignment that I would like
>>>>>>>>>>> to
>>>>>>>>>>> be
>>>>>>>>>>> retrieved from wicket.
>>>>>>>>>>> In my java code I have created a link that downloads the file.
>>>>>>>>>>> This
>>>>>>>>>>> works fine if I show the link on a page and click on it:
>>>>>>>>>>>
>>>>>>>>>>>   DownloadLink dlink = new DownloadLink("downloadMsf",
>>>>>>>>>>> currentJalviewAlignment) {
>>>>>>>>>>>           @Override
>>>>>>>>>>>           public void onClick() {
>>>>>>>>>>>                   String alignment = (String)
>>>>>>>>>>> currentJalviewAlignment.getObject();
>>>>>>>>>>>                   byte[] bytes = alignment.getBytes();
>>>>>>>>>>>                   getRequestCycle().setRequestTarget(new
>>>>>>>>>>> AlignmentRequestTarget(bytes, "alignment" + ".fasta"));
>>>>>>>>>>>           }
>>>>>>>>>>>   };
>>>>>>>>>>>
>>>>>>>>>>> When I try to do the obvious, replace the {{URL_HERE}} part with
>>>>>>>>>>> <span
>>>>>>>>>>> wicket:id="downloadMsf"></span>  it complains about non-valid XML
>>>>>>>>>>> and
>>>>>>>>>>> such.
>>>>>>>>>>>
>>>>>>>>>>> Any ideas?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Become a Wicket expert, learn from the best:
>>>>>>>>> http://wicketinaction.com
>>>>>>>>> Apache Wicket 1.3.5 is released
>>>>>>>>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Become a Wicket expert, learn from the best:
>>>>>>> http://wicketinaction.com
>>>>>>> Apache Wicket 1.3.5 is released
>>>>>>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Become a Wicket expert, learn from the best: http://wicketinaction.com
>>>>> Apache Wicket 1.3.5 is released
>>>>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to