Re: Strange wicket bug in DataView?

2007-12-21 Thread Matej Knopp
Maybe, just maybe, we could look at the accept header, before
rendering the page...

-Matej

On Dec 21, 2007 6:42 AM, Igor Vaynberg [EMAIL PROTECTED] wrote:
 that is actually in our gotchas wiki page - images with src= cause a
 request to the page...

 -igor



 On Dec 20, 2007 6:54 PM, Tauren Mills [EMAIL PROTECTED] wrote:
  I think this problem is caused by the browser.  Using Firebug, it
  looks like the browser is actually requesting the page a second time.
  Both requests go to:
  http://localhost:8080/db/app/?wicket:interface=:15
 
  Here are the request headers from the first request:
 
  Host: localhost:8080
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
  rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
  Accept: 
  text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
  Accept-Language: en-us,en;q=0.5
  Accept-Encoding: gzip,deflate
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Referer: http://localhost:8080/db/app/?wicket:interface=:2
  Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
 
  The browser then makes a second request:
 
  Host: localhost:8080
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
  rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
  Accept: image/png,*/*;q=0.5
  Accept-Language: en-us,en;q=0.5
  Accept-Encoding: gzip,deflate
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Referer: http://localhost:8080/db/app/?wicket:interface=:3
  Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
  Cache-Control: max-age=0
 
  Note that the second request has a different Accept (images only?) and
  a Cache-Control.
 
  This seems to only be happening to me when the image source is empty.
  Even having any text in there works.  The following wicket output
  causes the problem:
  img wicket:id=image1 src=/
 
  So it looks like if there is an image on the page without a source
  (not just a broken image), that Firefox requests the page URL again.
  And by doing so, causes my DataView to refresh.  But it doesn't
  refresh the DOM on the 2nd request, only images.  Thus the links are
  no longer valid.
 
  To solve this problem, I just need to make sure that my image src is
  never an empty string.  Here is a simple hack that I did to my
  StaticImage class:
 
  public class StaticImage extends WebComponent {
  private static final long serialVersionUID = 1L;
 
  public StaticImage(String id, IModel model) {
  super(id, model);
  }
 
  protected void onComponentTag(ComponentTag tag) {
  checkComponentTag(tag, img);
  String src = getModelObjectAsString();
  tag.put(src, (!src.equals()?src:no_image) );
  }
 
  }
 
  With this, img src=no_image in the markup.  It doesn't render of
  course, but it also doesn't cause a 2nd page refresh.
 
  One last thing.  If I just add img src=/ to my page's HTML, it
  appears that it is rewritten by wicket to be this: img src=..//.
  So maybe this is a problem that was already discovered and solved.
  But when I made a custom component that alters the src, I lost that
  solution.
 
  I guess in the end, this isn't a wicket problem.  It isn't really even
  a problem with my application, although I can solve it in my
  application.  I don't know enough about why Firefox is doing this, so
  it might not even be a browser problem.  Who knows...
 
  I hope this helps someone else who runs into a similar issue.
 
  Tauren
 
 
 
 
 
 
 
 
  On Dec 20, 2007 4:16 PM, Tauren Mills [EMAIL PROTECTED] wrote:
   Gwyn,
  
   Thanks for the guidance!  The DataProvider.iterator was being executed
   twice.  I put a breakpoint in iterator() and it would pause when the
   page first started to load.  Then I'd continue running the code, and
   the breakpoint was hit again.  At that time, the full page was
   rendered except for some images on the page, and the browser was
   paused loading again because of the breakpoint.  When I continued
   running the code, the page would finish loading.
  
   The images that weren't loaded are URLs stored in my DB.  I found that
   when I had image URLs in the DB, everything worked fine.  But when I
   had NULL entries for the images, then I'd get this exception and the
   iterator would run twice.  So when the iterator would run twice, the
   component hierarchy would change, causing the link URLs to no longer
   be valid.
  
   I'm still tracking it down to figure out exactly what is going on.
   But you got me on the right track.  And now  I'm thinking it is more
   of a problem in my application or database than in wicket itself.
   Which is what I was hoping was the case anyway! :)
  
   Tauren
  
  
  
   On Dec 20, 2007 7:43 AM, Gwyn Evans [EMAIL PROTECTED] wrote:
No real idea, but I'd be tempted to stick in some diagnostic logging
to log the calls to the DataProvider  the details of 

Re: Strange wicket bug in DataView?

2007-12-21 Thread igor . vaynberg
do all browsers send it?

-igor

On 12/21/07, Matej Knopp [EMAIL PROTECTED] wrote:
 Maybe, just maybe, we could look at the accept header, before
 rendering the page...

 -Matej

 On Dec 21, 2007 6:42 AM, Igor Vaynberg [EMAIL PROTECTED] wrote:
  that is actually in our gotchas wiki page - images with src= cause a
  request to the page...
 
  -igor
 
 
 
  On Dec 20, 2007 6:54 PM, Tauren Mills [EMAIL PROTECTED] wrote:
   I think this problem is caused by the browser.  Using Firebug, it
   looks like the browser is actually requesting the page a second time.
   Both requests go to:
   http://localhost:8080/db/app/?wicket:interface=:15
  
   Here are the request headers from the first request:
  
   Host: localhost:8080
   User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
   rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
   Accept:
 text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
   Accept-Language: en-us,en;q=0.5
   Accept-Encoding: gzip,deflate
   Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
   Keep-Alive: 300
   Connection: keep-alive
   Referer: http://localhost:8080/db/app/?wicket:interface=:2
   Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
  
   The browser then makes a second request:
  
   Host: localhost:8080
   User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
   rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
   Accept: image/png,*/*;q=0.5
   Accept-Language: en-us,en;q=0.5
   Accept-Encoding: gzip,deflate
   Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
   Keep-Alive: 300
   Connection: keep-alive
   Referer: http://localhost:8080/db/app/?wicket:interface=:3
   Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
   Cache-Control: max-age=0
  
   Note that the second request has a different Accept (images only?) and
   a Cache-Control.
  
   This seems to only be happening to me when the image source is empty.
   Even having any text in there works.  The following wicket output
   causes the problem:
   img wicket:id=image1 src=/
  
   So it looks like if there is an image on the page without a source
   (not just a broken image), that Firefox requests the page URL again.
   And by doing so, causes my DataView to refresh.  But it doesn't
   refresh the DOM on the 2nd request, only images.  Thus the links are
   no longer valid.
  
   To solve this problem, I just need to make sure that my image src is
   never an empty string.  Here is a simple hack that I did to my
   StaticImage class:
  
   public class StaticImage extends WebComponent {
   private static final long serialVersionUID = 1L;
  
   public StaticImage(String id, IModel model) {
   super(id, model);
   }
  
   protected void onComponentTag(ComponentTag tag) {
   checkComponentTag(tag, img);
   String src = getModelObjectAsString();
   tag.put(src, (!src.equals()?src:no_image) );
   }
  
   }
  
   With this, img src=no_image in the markup.  It doesn't render of
   course, but it also doesn't cause a 2nd page refresh.
  
   One last thing.  If I just add img src=/ to my page's HTML, it
   appears that it is rewritten by wicket to be this: img src=..//.
   So maybe this is a problem that was already discovered and solved.
   But when I made a custom component that alters the src, I lost that
   solution.
  
   I guess in the end, this isn't a wicket problem.  It isn't really even
   a problem with my application, although I can solve it in my
   application.  I don't know enough about why Firefox is doing this, so
   it might not even be a browser problem.  Who knows...
  
   I hope this helps someone else who runs into a similar issue.
  
   Tauren
  
  
  
  
  
  
  
  
   On Dec 20, 2007 4:16 PM, Tauren Mills [EMAIL PROTECTED] wrote:
Gwyn,
   
Thanks for the guidance!  The DataProvider.iterator was being executed
twice.  I put a breakpoint in iterator() and it would pause when the
page first started to load.  Then I'd continue running the code, and
the breakpoint was hit again.  At that time, the full page was
rendered except for some images on the page, and the browser was
paused loading again because of the breakpoint.  When I continued
running the code, the page would finish loading.
   
The images that weren't loaded are URLs stored in my DB.  I found that
when I had image URLs in the DB, everything worked fine.  But when I
had NULL entries for the images, then I'd get this exception and the
iterator would run twice.  So when the iterator would run twice, the
component hierarchy would change, causing the link URLs to no longer
be valid.
   
I'm still tracking it down to figure out exactly what is going on.
But you got me on the right track.  And now  I'm thinking it is more
of a problem in my application or database than in wicket itself.
Which is what I was hoping was the case anyway! :)
   

Re: Strange wicket bug in DataView?

2007-12-20 Thread Gwyn Evans
No real idea, but I'd be tempted to stick in some diagnostic logging
to log the calls to the DataProvider  the details of the lists it
returns, just to check there's nothing odd happening there...

/Gwyn

On 20/12/2007, Tauren Mills [EMAIL PROTECTED] wrote:
 Thanks.  I will try to put together a quickstart, but I'm not sure I
 can duplicate the problem in it.

 Tauren


 On Dec 19, 2007 3:23 PM, Matej Knopp [EMAIL PROTECTED] wrote:
  This is definitely strange. However without posting more code (or
  preferably a complete testcase to reproduce) I don't really know how
  to help you with it.
 
  -Matej
 
 
  On Dec 20, 2007 12:05 AM, Tauren Mills [EMAIL PROTECTED] wrote:
   Does anyone have any thoughts on this problem?  I realize this it may
   seem unique and isolated, but are there any suggestions even on how to
   figure out what is wrong?  How can I figure out why the component path
   in the URLs for the Links in the DataView are not matching the
   component hierarchy?  These are the URLs output at initial page
   creation time:
  
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
  
   However, at the time that onClick is processed, the component
   hierarchy seems to have changed and now have the value of 3 and 4
   instead of 1 and 2.  The links above don't work, but the following
   links do if I manually enter them:
  
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:3:actions:select::ILinkListener::
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:4:actions:select::ILinkListener::
  
   Its almost as if a secondary page render has occurred.  But I've added
   logging to my page and don't see any extra log output.
  
   My project is basically done and ready to launch, but this is holding
   it up.  Any ideas or suggestions?
  
   Thanks!
   Tauren
  
  
  
   On Dec 18, 2007 11:21 PM, Tauren Mills [EMAIL PROTECTED] wrote:
I'm having an Exception that is happening before any of my
Link.onClick() code is executed, making me wonder if there is a wicket
bug of some sort.
   
I have a DataView with an ActionPanel in each row that contains a
Link. There is no AJAX on this page.  When I load the page with the
DataView for the first time, clicking the Link doesn't work and I get
an Exception (see below).  But if I click the browser back button,
then click the same link, it works.  However, this problem only occurs
for some of the data records, not all of them.  But the same data
records always break.  I thought it was a data problem because of
this, but tracing back into the wicket code seems to indicate
otherwise.  Also, I'm running on the latest wicket trunk that I
updated to about 15 minutes ago.
   
The URLs that are output for the Links in the dataview when the page
is first loaded is (dataview has only 2 data records):
   
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
   
When I hit the back button, the URLs for that same links are:
   
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:5:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:6:actions:select::ILinkListener::
   
The exception that is thrown is this (only when the first links are
clicked, not the links after hitting the back button):
   
WicketMessage: component reports:reports:1:actions:select not found on
page 
com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
= 6], listener interface = [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
   
Root cause:
   
org.apache.wicket.WicketRuntimeException: component
reports:reports:1:actions:select not found on page
com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
= 6], listener interface = [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
at 
org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:411)
at 
org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:456)
at 
org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:139)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1152)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1245)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
at 

Re: Strange wicket bug in DataView?

2007-12-20 Thread Tauren Mills
Gwyn,

Thanks for the guidance!  The DataProvider.iterator was being executed
twice.  I put a breakpoint in iterator() and it would pause when the
page first started to load.  Then I'd continue running the code, and
the breakpoint was hit again.  At that time, the full page was
rendered except for some images on the page, and the browser was
paused loading again because of the breakpoint.  When I continued
running the code, the page would finish loading.

The images that weren't loaded are URLs stored in my DB.  I found that
when I had image URLs in the DB, everything worked fine.  But when I
had NULL entries for the images, then I'd get this exception and the
iterator would run twice.  So when the iterator would run twice, the
component hierarchy would change, causing the link URLs to no longer
be valid.

I'm still tracking it down to figure out exactly what is going on.
But you got me on the right track.  And now  I'm thinking it is more
of a problem in my application or database than in wicket itself.
Which is what I was hoping was the case anyway! :)

Tauren


On Dec 20, 2007 7:43 AM, Gwyn Evans [EMAIL PROTECTED] wrote:
 No real idea, but I'd be tempted to stick in some diagnostic logging
 to log the calls to the DataProvider  the details of the lists it
 returns, just to check there's nothing odd happening there...

 /Gwyn


 On 20/12/2007, Tauren Mills [EMAIL PROTECTED] wrote:
  Thanks.  I will try to put together a quickstart, but I'm not sure I
  can duplicate the problem in it.
 
  Tauren
 
 
  On Dec 19, 2007 3:23 PM, Matej Knopp [EMAIL PROTECTED] wrote:
   This is definitely strange. However without posting more code (or
   preferably a complete testcase to reproduce) I don't really know how
   to help you with it.
  
   -Matej
  
  
   On Dec 20, 2007 12:05 AM, Tauren Mills [EMAIL PROTECTED] wrote:
Does anyone have any thoughts on this problem?  I realize this it may
seem unique and isolated, but are there any suggestions even on how to
figure out what is wrong?  How can I figure out why the component path
in the URLs for the Links in the DataView are not matching the
component hierarchy?  These are the URLs output at initial page
creation time:
   
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
   
However, at the time that onClick is processed, the component
hierarchy seems to have changed and now have the value of 3 and 4
instead of 1 and 2.  The links above don't work, but the following
links do if I manually enter them:
   
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:3:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:4:actions:select::ILinkListener::
   
Its almost as if a secondary page render has occurred.  But I've added
logging to my page and don't see any extra log output.
   
My project is basically done and ready to launch, but this is holding
it up.  Any ideas or suggestions?
   
Thanks!
Tauren
   
   
   
On Dec 18, 2007 11:21 PM, Tauren Mills [EMAIL PROTECTED] wrote:
 I'm having an Exception that is happening before any of my
 Link.onClick() code is executed, making me wonder if there is a wicket
 bug of some sort.

 I have a DataView with an ActionPanel in each row that contains a
 Link. There is no AJAX on this page.  When I load the page with the
 DataView for the first time, clicking the Link doesn't work and I get
 an Exception (see below).  But if I click the browser back button,
 then click the same link, it works.  However, this problem only occurs
 for some of the data records, not all of them.  But the same data
 records always break.  I thought it was a data problem because of
 this, but tracing back into the wicket code seems to indicate
 otherwise.  Also, I'm running on the latest wicket trunk that I
 updated to about 15 minutes ago.

 The URLs that are output for the Links in the dataview when the page
 is first loaded is (dataview has only 2 data records):

 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::

 When I hit the back button, the URLs for that same links are:

 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:5:actions:select::ILinkListener::
 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:6:actions:select::ILinkListener::

 The exception that is thrown is this (only when the first links are
 clicked, not the links after hitting the back button):

 WicketMessage: component reports:reports:1:actions:select not found on
 page 
 

Re: Strange wicket bug in DataView?

2007-12-20 Thread Tauren Mills
I think this problem is caused by the browser.  Using Firebug, it
looks like the browser is actually requesting the page a second time.
Both requests go to:
http://localhost:8080/db/app/?wicket:interface=:15

Here are the request headers from the first request:

Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: 
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:8080/db/app/?wicket:interface=:2
Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small

The browser then makes a second request:

Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost:8080/db/app/?wicket:interface=:3
Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
Cache-Control: max-age=0

Note that the second request has a different Accept (images only?) and
a Cache-Control.

This seems to only be happening to me when the image source is empty.
Even having any text in there works.  The following wicket output
causes the problem:
img wicket:id=image1 src=/

So it looks like if there is an image on the page without a source
(not just a broken image), that Firefox requests the page URL again.
And by doing so, causes my DataView to refresh.  But it doesn't
refresh the DOM on the 2nd request, only images.  Thus the links are
no longer valid.

To solve this problem, I just need to make sure that my image src is
never an empty string.  Here is a simple hack that I did to my
StaticImage class:

public class StaticImage extends WebComponent {
private static final long serialVersionUID = 1L;

public StaticImage(String id, IModel model) {
super(id, model);
}

protected void onComponentTag(ComponentTag tag) {
checkComponentTag(tag, img);
String src = getModelObjectAsString();
tag.put(src, (!src.equals()?src:no_image) );
}

}

With this, img src=no_image in the markup.  It doesn't render of
course, but it also doesn't cause a 2nd page refresh.

One last thing.  If I just add img src=/ to my page's HTML, it
appears that it is rewritten by wicket to be this: img src=..//.
So maybe this is a problem that was already discovered and solved.
But when I made a custom component that alters the src, I lost that
solution.

I guess in the end, this isn't a wicket problem.  It isn't really even
a problem with my application, although I can solve it in my
application.  I don't know enough about why Firefox is doing this, so
it might not even be a browser problem.  Who knows...

I hope this helps someone else who runs into a similar issue.

Tauren







On Dec 20, 2007 4:16 PM, Tauren Mills [EMAIL PROTECTED] wrote:
 Gwyn,

 Thanks for the guidance!  The DataProvider.iterator was being executed
 twice.  I put a breakpoint in iterator() and it would pause when the
 page first started to load.  Then I'd continue running the code, and
 the breakpoint was hit again.  At that time, the full page was
 rendered except for some images on the page, and the browser was
 paused loading again because of the breakpoint.  When I continued
 running the code, the page would finish loading.

 The images that weren't loaded are URLs stored in my DB.  I found that
 when I had image URLs in the DB, everything worked fine.  But when I
 had NULL entries for the images, then I'd get this exception and the
 iterator would run twice.  So when the iterator would run twice, the
 component hierarchy would change, causing the link URLs to no longer
 be valid.

 I'm still tracking it down to figure out exactly what is going on.
 But you got me on the right track.  And now  I'm thinking it is more
 of a problem in my application or database than in wicket itself.
 Which is what I was hoping was the case anyway! :)

 Tauren



 On Dec 20, 2007 7:43 AM, Gwyn Evans [EMAIL PROTECTED] wrote:
  No real idea, but I'd be tempted to stick in some diagnostic logging
  to log the calls to the DataProvider  the details of the lists it
  returns, just to check there's nothing odd happening there...
 
  /Gwyn
 
 
  On 20/12/2007, Tauren Mills [EMAIL PROTECTED] wrote:
   Thanks.  I will try to put together a quickstart, but I'm not sure I
   can duplicate the problem in it.
  
   Tauren
  
  
   On Dec 19, 2007 3:23 PM, Matej Knopp [EMAIL PROTECTED] wrote:
This is definitely strange. However without posting more code (or
preferably a complete testcase to reproduce) I don't really know how
to help you with it.
   
-Matej
   
   
On Dec 20, 2007 

Re: Strange wicket bug in DataView?

2007-12-20 Thread Igor Vaynberg
that is actually in our gotchas wiki page - images with src= cause a
request to the page...

-igor


On Dec 20, 2007 6:54 PM, Tauren Mills [EMAIL PROTECTED] wrote:
 I think this problem is caused by the browser.  Using Firebug, it
 looks like the browser is actually requesting the page a second time.
 Both requests go to:
 http://localhost:8080/db/app/?wicket:interface=:15

 Here are the request headers from the first request:

 Host: localhost:8080
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
 rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
 Accept: 
 text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
 Accept-Language: en-us,en;q=0.5
 Accept-Encoding: gzip,deflate
 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
 Keep-Alive: 300
 Connection: keep-alive
 Referer: http://localhost:8080/db/app/?wicket:interface=:2
 Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small

 The browser then makes a second request:

 Host: localhost:8080
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
 rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
 Accept: image/png,*/*;q=0.5
 Accept-Language: en-us,en;q=0.5
 Accept-Encoding: gzip,deflate
 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
 Keep-Alive: 300
 Connection: keep-alive
 Referer: http://localhost:8080/db/app/?wicket:interface=:3
 Cookie: JSESSIONID=1hndka1no7ub6; styleswitcher_style=small
 Cache-Control: max-age=0

 Note that the second request has a different Accept (images only?) and
 a Cache-Control.

 This seems to only be happening to me when the image source is empty.
 Even having any text in there works.  The following wicket output
 causes the problem:
 img wicket:id=image1 src=/

 So it looks like if there is an image on the page without a source
 (not just a broken image), that Firefox requests the page URL again.
 And by doing so, causes my DataView to refresh.  But it doesn't
 refresh the DOM on the 2nd request, only images.  Thus the links are
 no longer valid.

 To solve this problem, I just need to make sure that my image src is
 never an empty string.  Here is a simple hack that I did to my
 StaticImage class:

 public class StaticImage extends WebComponent {
 private static final long serialVersionUID = 1L;

 public StaticImage(String id, IModel model) {
 super(id, model);
 }

 protected void onComponentTag(ComponentTag tag) {
 checkComponentTag(tag, img);
 String src = getModelObjectAsString();
 tag.put(src, (!src.equals()?src:no_image) );
 }

 }

 With this, img src=no_image in the markup.  It doesn't render of
 course, but it also doesn't cause a 2nd page refresh.

 One last thing.  If I just add img src=/ to my page's HTML, it
 appears that it is rewritten by wicket to be this: img src=..//.
 So maybe this is a problem that was already discovered and solved.
 But when I made a custom component that alters the src, I lost that
 solution.

 I guess in the end, this isn't a wicket problem.  It isn't really even
 a problem with my application, although I can solve it in my
 application.  I don't know enough about why Firefox is doing this, so
 it might not even be a browser problem.  Who knows...

 I hope this helps someone else who runs into a similar issue.

 Tauren








 On Dec 20, 2007 4:16 PM, Tauren Mills [EMAIL PROTECTED] wrote:
  Gwyn,
 
  Thanks for the guidance!  The DataProvider.iterator was being executed
  twice.  I put a breakpoint in iterator() and it would pause when the
  page first started to load.  Then I'd continue running the code, and
  the breakpoint was hit again.  At that time, the full page was
  rendered except for some images on the page, and the browser was
  paused loading again because of the breakpoint.  When I continued
  running the code, the page would finish loading.
 
  The images that weren't loaded are URLs stored in my DB.  I found that
  when I had image URLs in the DB, everything worked fine.  But when I
  had NULL entries for the images, then I'd get this exception and the
  iterator would run twice.  So when the iterator would run twice, the
  component hierarchy would change, causing the link URLs to no longer
  be valid.
 
  I'm still tracking it down to figure out exactly what is going on.
  But you got me on the right track.  And now  I'm thinking it is more
  of a problem in my application or database than in wicket itself.
  Which is what I was hoping was the case anyway! :)
 
  Tauren
 
 
 
  On Dec 20, 2007 7:43 AM, Gwyn Evans [EMAIL PROTECTED] wrote:
   No real idea, but I'd be tempted to stick in some diagnostic logging
   to log the calls to the DataProvider  the details of the lists it
   returns, just to check there's nothing odd happening there...
  
   /Gwyn
  
  
   On 20/12/2007, Tauren Mills [EMAIL PROTECTED] wrote:
Thanks.  I will try to put together a quickstart, but I'm not sure I
can duplicate the problem in it.
   
Tauren
   
   
  

Re: Strange wicket bug in DataView?

2007-12-19 Thread Matej Knopp
This is definitely strange. However without posting more code (or
preferably a complete testcase to reproduce) I don't really know how
to help you with it.

-Matej

On Dec 20, 2007 12:05 AM, Tauren Mills [EMAIL PROTECTED] wrote:
 Does anyone have any thoughts on this problem?  I realize this it may
 seem unique and isolated, but are there any suggestions even on how to
 figure out what is wrong?  How can I figure out why the component path
 in the URLs for the Links in the DataView are not matching the
 component hierarchy?  These are the URLs output at initial page
 creation time:

 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::

 However, at the time that onClick is processed, the component
 hierarchy seems to have changed and now have the value of 3 and 4
 instead of 1 and 2.  The links above don't work, but the following
 links do if I manually enter them:

 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:3:actions:select::ILinkListener::
 http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:4:actions:select::ILinkListener::

 Its almost as if a secondary page render has occurred.  But I've added
 logging to my page and don't see any extra log output.

 My project is basically done and ready to launch, but this is holding
 it up.  Any ideas or suggestions?

 Thanks!
 Tauren



 On Dec 18, 2007 11:21 PM, Tauren Mills [EMAIL PROTECTED] wrote:
  I'm having an Exception that is happening before any of my
  Link.onClick() code is executed, making me wonder if there is a wicket
  bug of some sort.
 
  I have a DataView with an ActionPanel in each row that contains a
  Link. There is no AJAX on this page.  When I load the page with the
  DataView for the first time, clicking the Link doesn't work and I get
  an Exception (see below).  But if I click the browser back button,
  then click the same link, it works.  However, this problem only occurs
  for some of the data records, not all of them.  But the same data
  records always break.  I thought it was a data problem because of
  this, but tracing back into the wicket code seems to indicate
  otherwise.  Also, I'm running on the latest wicket trunk that I
  updated to about 15 minutes ago.
 
  The URLs that are output for the Links in the dataview when the page
  is first loaded is (dataview has only 2 data records):
 
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
 
  When I hit the back button, the URLs for that same links are:
 
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:5:actions:select::ILinkListener::
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:6:actions:select::ILinkListener::
 
  The exception that is thrown is this (only when the first links are
  clicked, not the links after hitting the back button):
 
  WicketMessage: component reports:reports:1:actions:select not found on
  page com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
  = 6], listener interface = [RequestListenerInterface
  name=ILinkListener, method=public abstract void
  org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
 
  Root cause:
 
  org.apache.wicket.WicketRuntimeException: component
  reports:reports:1:actions:select not found on page
  com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
  = 6], listener interface = [RequestListenerInterface
  name=ILinkListener, method=public abstract void
  org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
  at 
  org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:411)
  at 
  org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:456)
  at 
  org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:139)
  at org.apache.wicket.RequestCycle.step(RequestCycle.java:1152)
  at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1245)
  at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
  at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
  at 
  org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:121)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
  at 
  org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050)
  at 
  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
  at 
  

Re: Strange wicket bug in DataView?

2007-12-19 Thread Tauren Mills
Thanks.  I will try to put together a quickstart, but I'm not sure I
can duplicate the problem in it.

Tauren


On Dec 19, 2007 3:23 PM, Matej Knopp [EMAIL PROTECTED] wrote:
 This is definitely strange. However without posting more code (or
 preferably a complete testcase to reproduce) I don't really know how
 to help you with it.

 -Matej


 On Dec 20, 2007 12:05 AM, Tauren Mills [EMAIL PROTECTED] wrote:
  Does anyone have any thoughts on this problem?  I realize this it may
  seem unique and isolated, but are there any suggestions even on how to
  figure out what is wrong?  How can I figure out why the component path
  in the URLs for the Links in the DataView are not matching the
  component hierarchy?  These are the URLs output at initial page
  creation time:
 
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
 
  However, at the time that onClick is processed, the component
  hierarchy seems to have changed and now have the value of 3 and 4
  instead of 1 and 2.  The links above don't work, but the following
  links do if I manually enter them:
 
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:3:actions:select::ILinkListener::
  http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:4:actions:select::ILinkListener::
 
  Its almost as if a secondary page render has occurred.  But I've added
  logging to my page and don't see any extra log output.
 
  My project is basically done and ready to launch, but this is holding
  it up.  Any ideas or suggestions?
 
  Thanks!
  Tauren
 
 
 
  On Dec 18, 2007 11:21 PM, Tauren Mills [EMAIL PROTECTED] wrote:
   I'm having an Exception that is happening before any of my
   Link.onClick() code is executed, making me wonder if there is a wicket
   bug of some sort.
  
   I have a DataView with an ActionPanel in each row that contains a
   Link. There is no AJAX on this page.  When I load the page with the
   DataView for the first time, clicking the Link doesn't work and I get
   an Exception (see below).  But if I click the browser back button,
   then click the same link, it works.  However, this problem only occurs
   for some of the data records, not all of them.  But the same data
   records always break.  I thought it was a data problem because of
   this, but tracing back into the wicket code seems to indicate
   otherwise.  Also, I'm running on the latest wicket trunk that I
   updated to about 15 minutes ago.
  
   The URLs that are output for the Links in the dataview when the page
   is first loaded is (dataview has only 2 data records):
  
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::
  
   When I hit the back button, the URLs for that same links are:
  
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:5:actions:select::ILinkListener::
   http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:6:actions:select::ILinkListener::
  
   The exception that is thrown is this (only when the first links are
   clicked, not the links after hitting the back button):
  
   WicketMessage: component reports:reports:1:actions:select not found on
   page 
   com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
   = 6], listener interface = [RequestListenerInterface
   name=ILinkListener, method=public abstract void
   org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
  
   Root cause:
  
   org.apache.wicket.WicketRuntimeException: component
   reports:reports:1:actions:select not found on page
   com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
   = 6], listener interface = [RequestListenerInterface
   name=ILinkListener, method=public abstract void
   org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
   at 
   org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:411)
   at 
   org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:456)
   at 
   org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:139)
   at org.apache.wicket.RequestCycle.step(RequestCycle.java:1152)
   at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1245)
   at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
   at 
   org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
   at 
   org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:121)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   at 

Strange wicket bug in DataView?

2007-12-18 Thread Tauren Mills
I'm having an Exception that is happening before any of my
Link.onClick() code is executed, making me wonder if there is a wicket
bug of some sort.

I have a DataView with an ActionPanel in each row that contains a
Link. There is no AJAX on this page.  When I load the page with the
DataView for the first time, clicking the Link doesn't work and I get
an Exception (see below).  But if I click the browser back button,
then click the same link, it works.  However, this problem only occurs
for some of the data records, not all of them.  But the same data
records always break.  I thought it was a data problem because of
this, but tracing back into the wicket code seems to indicate
otherwise.  Also, I'm running on the latest wicket trunk that I
updated to about 15 minutes ago.

The URLs that are output for the Links in the dataview when the page
is first loaded is (dataview has only 2 data records):

http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:1:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:2:actions:select::ILinkListener::

When I hit the back button, the URLs for that same links are:

http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:5:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:6:reports:reports:6:actions:select::ILinkListener::

The exception that is thrown is this (only when the first links are
clicked, not the links after hitting the back button):

WicketMessage: component reports:reports:1:actions:select not found on
page com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
= 6], listener interface = [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]

Root cause:

org.apache.wicket.WicketRuntimeException: component
reports:reports:1:actions:select not found on page
com.theseniorlist.database.web.page.site.service.ServiceDetailsPage[id
= 6], listener interface = [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
at 
org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:411)
at 
org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:456)
at 
org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:139)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1152)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1245)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:489)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050)
at 
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
at org.mortbay.jetty.Server.handle(Server.java:269)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
at 
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:687)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:492)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
at 
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:208)
at 
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

Sure enough, when I trace the wicket code and examine the data in
memory, the first time the dataview page is loaded, the component path
to the actual components are values 3 and 4.  In fact, if after I load
the page for the first time, I manually enter the following URLs, I
get the correct page without an exception:

http://localhost:8082/db/app/?wicket:interface=:8:reports:reports:3:actions:select::ILinkListener::
http://localhost:8082/db/app/?wicket:interface=:8:reports:reports:4:actions:select::ILinkListener::

Why would the URLs that are rendered the first time be wrong?  Is
there something in my code that could cause this?