getXCoord() --> property name = "XCoord" not "xCoord"
This is a common mistake, but this behavior is goverened by the Java Beans specification. Another reason to like annotations :-) On 3/14/06, Mike Snare <[EMAIL PROTECTED]> wrote: > I posted this Sunday on the user list but got no response, which is > why I am cross-posting it here. > > I'm writing a auto-refresh component that refreshes the page using > javascript and resets the scroll position to the pre-refresh position. > To do this, I have created a Refresher component. > > Quick rundown: > > The Refresher component is an extension of BaseComponent. The > template contains a simple form with 2 hidden fields. One is used to > track the x-offset of the horizontal scroll bar, and the other is used > to track the vertical offset of the scrollbar. Their values are bound > to the xCoord and yCoord properties of the Refresher component. The > template also injects a script. > > The script records the x and y offsets into the aforementioned hidden > fields everytime the page moves or the user clicks or types. It also > resets the x and y offsets during the onLoad method of the page. at > the end of onLoad, it uses the javascript setTimeout method to submit > the form to a listener in the Refresher component. The listener does > nothing, but exists just to have a place to submit the form to so that > the x and y coordinates get stored so they can be reset. > > The properties that store the x and y coordinates are where I am > having huge problems. > > I don't need access to them in the class, so I've just defined them > via property elements in the Refresher.jwc spec. This works fine -- > the page refreshes and all is well. The problem is that the page(s) > that will use this component have several links/buttons that will > submit to the page and re-display the same page. After this request > (which does not submit the x and y coordinates as it is part of a > different form) the page should redisplay with the correct scroll > state. This doesn't happen because, as I mentioned, this other form > doesn't submit the scroll state. > > My first attempt was to add persistence to the xCoord and yCoord > properties in the Refresher.jwc via persist="session" attributes on > the properties. This causes the page to fail with an exception on the > second refresh. The first refresh works and the scroll state is > correct, but on the second refresh I get an exception saying that the > Refresher component does not have an xCoord property. > > Class $Refresher_51 does not contain a property named 'xCoord'. > org.apache.hivemind.util.ClassAdaptor.getPropertyAdaptor(ClassAdaptor.java:136) > > Also, If I add abstract accessors to the Refresher class for the x and y > coords: > public abstract int getXCoord(); > public abstract int getYCoord(); > I get errors saying that Refresher already has a getXCoord method: > > Error at classpath:/package/refresh/Refresher.jwc, line 5, column 134: > Error adding property XCoord to class package.refresh.Refresher: > Unable to add method int getXCoord() to class $Refresher_18: duplicate > method: getXCoord > > Can anyone shed some light on what I'm doing wrong? Other components > use persistence (tableview, treeview) so I know it's possible, clearly > I'm just screwing up. > > Tap4, java 1.4.2, tomcat 5.0.28 > > Any help would be great. > > Thanks, > -Mike > > UPDATE: > > I tried having the containing page pass in a parameter that references > a property of the page that could be used to store the component > properties (not because I thought it was a good idea, I was just > testing) and it still failed on the second refresh with the error > message about the property not existing. > > I have managed to work around the issue by rolling my own session > persistence hack based on the page name and the name of the property > being persisted. I use the pageAttach and detach methods in the > component to update/retrieve the values for use in the current cycle. > It still doesn't answer the question of why this doesn't work. > > If I use ONLY abstract accessors/mutators it works fine. If I use > ONLY property elements in the jwc it works fine. If I use both (which > should be perfectly possible) It pukes with the duplicate element > exception. > > Even if I ONLY use the property elements in the jwc it pukes (property > not found) if I set the persist to anything other than the default. > > Thanks, > -Mike > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Howard M. Lewis Ship Independent J2EE / Open-Source Java Consultant Creator, Jakarta Tapestry Creator, Jakarta HiveMind Professional Tapestry training, mentoring, support and project work. http://howardlewisship.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]