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);
> >  > > > > }
> >  > > > > }
> >  > > > >
> >  > > > >
> >  > > > >
> >  > > >
> >  >
>

Reply via email to