Doh! While cutting and pasting my config files, I happened to notice I had a <context:component-scan> tag in each of my two Spring beans xml files. One had scope-resolver set to PageScopeResolver and the other didn't. That must be the problem. I won't be able to try it until later today. Thanks for your help. Mike
On February 4, 2010 at 8:04 AM Bob Schellink <[email protected]> wrote: > Hi Mike, > > Sorry for the late reply. I believe the PageScopeResolver is suppose to > resolve this issue by making > pages prototype. The Click examples uses the same approach so not 100% sure > why you are seeing > different behavior. Could you post your click.xml and spring.xml here, perhaps > its a configuration > issue? > > kind regards > > bob > > On 3/02/2010 10:02 AM, Mike W wrote: > > > > > > Yes, it's the same. > > > > elloWorldPage.onRender(): this.hashCode = 18557807 > > [Click] [info ] renderTemplate: /hello-world.htm - 131 ms > > [Click] [info ] handleRequest: /hello-world.htm - 171 ms > > [Click] [debug] GET http://localhost:8080/lamapp/hello-world.htm > > HelloWorldPage.onRender(): this.hashCode = 18557807 > > > > On February 2, 2010 at 10:08 PM Bob Schellink <[email protected]> wrote: > > > > > Hmm, sounds as if Spring is creating a singleton Page instance and > > reserving it each request. > > > > > > If you print the Page hashcode do you receive the same value each > > request? > > > > > > public void onRender() { > > > System.out.println("Hash : " + this.getHashcode()); > > > } > > > > > > kind regards > > > > > > bob > > > > > > > > > On 3/02/2010 08:31 AM, Mike W wrote: > > > > > > > > > > > > Thanks for the quick reply, Bob. > > > > > > > > Yes, that's what it's acting like but how does the page get set to > > > > Stateful? I'm not doing it by calling setStateful(true) or doing > > > > anything in click.xml. The Page is just HelloWorld with @Component > > added > > > > to it. > > > > > > > > Does @Component/PageScopeResolver set the Page to stateful? I thought > > > > that was supposed to do the opposite -- set any injected spring > > beans to > > > > 'prototype'. > > > > > > > > BTW, I'm using 2.1.0-RC1 if it makes a difference. > > > > > > > > Thanks again. > > > > > > > > On February 2, 2010 at 9:22 PM Bob Schellink <[email protected]> wrote: > > > > > > > > > Hi Mike, > > > > > > > > > > My guess is that the Page is set to stateful? Stateful Pages are > > > > created once and reused on > > > > > subsequent calls. You'll need to either put a guard against adding to > > > > the model twice or use the > > > > > onDestroy event to remove the value from the model. > > > > > > > > > > kind regards > > > > > > > > > > bob > > > > > > > > > > On 3/02/2010 02:42 AM, Mike W wrote: > > > > > > > > > > > > > > > > > > I'm new to Click and I'm trying to integrate a Spring DAO into the > > > > > > HelloWorldPage (at end) example. > > > > > > > > > > > > I'm getting a 'model already contains value' exception on the > > second > > > > > > call to the onRender() method so it appears that the page is being > > > > > > reused instead of recreated. I guess I'm not sure what the > > > > > > PageScopeResolver is supposed to do. > > > > > > > > > > > > I added @Component (with the intention of adding @Resource for DAOs > > > > > > later) to HelloWorldPage.java and > > > > > > > > > > > > <context:component-scan > > > > > > base-package="clickhello.page" > > > > > > > > > > > > scope-resolver="org.apache.click.extras.spring.PageScopeResolver"/> > > > > > > > > > > > > to my Spring beans configuration. If I take either of the above > > changes > > > > > > out, the page can be re-rendered as expected. > > > > > > > > > > > > Thanks. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > package clickhello.page; > > > > > > > > > > > > import java.util.Date; > > > > > > import java.util.Random; > > > > > > import org.apache.click.Page; > > > > > > import org.apache.click.control.ActionLink; > > > > > > > > > > > > *...@component > > > > > > *public class HelloWorldPage extends Page { > > > > > > private static final Random randomGenerator = new Random(); > > > > > > private Date date = new Date(); > > > > > > > > > > > > public HelloWorldPage() { > > > > > > ActionLink refreshLink = new ActionLink("refresh"); > > > > > > ActionLink randomLink = new ActionLink("random", this, "onRandom"); > > > > > > > > > > > > addControl(refreshLink); > > > > > > addControl(randomLink); > > > > > > } > > > > > > > > > > > > public boolean onRandom() { > > > > > > long maximum = System.currentTimeMillis(); > > > > > > long random = randomGenerator.nextLong() % maximum; > > > > > > date = new Date(random); > > > > > > return true; > > > > > > } > > > > > > > > > > > > @Override > > > > > > public void onRender() { > > > > > > addModel("dateAndTime", date); > > > > > > } > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > >
