You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Brian Lavender <br...@brie.com> on 2011/06/16 02:38:07 UTC

How do I create a detachable model for a ListView?

I am trying to create a ListView using a detachable model, but I just
can't seem to figure out how to construct my DetachableModel. Basically, I
would like to create a detachable model and then pass it to my constructor
for a CheeseList.  This is built upon the code for the  examples for
Wicket in Action [1] by Dashorst in Chapter 4.3.  My DAO can return the
cheese based upon id or it can also return the list of cheeses. What
code do I need to put in CheeseDetach for my detachable model?


         CheeseDAO myDAO = new CheeseDAOImpl();

         // Can I make CheeseDetach construct it using the DAO as follows?
         CheeseDetach myDetach = new CheeseDetach(myDAO);

          // ListView can take list or Model as constructor.
          // How does the model work for a ListView?
          CheeseList myCheeseList = new CheeseList("cheeses", myDetach, getCart());

          // Add ListView to page

          add(myCheeseList);


1. https://code.google.com/p/wicketinaction/downloads/list
-- 
Brian Lavender
http://www.brie.com/brian/

"There are two ways of constructing a software design. One way is to
make it so simple that there are obviously no deficiencies. And the other
way is to make it so complicated that there are no obvious deficiencies."

Professor C. A. R. Hoare
The 1980 Turing award lecture

Re: How do I create a detachable model for a ListView?

Posted by Dan Retzlaff <dr...@gmail.com>.
CheeseDetach does do something for detach(), but it's implemented for you in
LoadableDetachableModel. To really understand what's going on you should
look at that class' implementation. It's straight forward.

http://svn.apache.org/repos/asf/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java

I recommend importing all of the Wicket source code into your IDE so can
easily review what's happening behind the APIs. You'll learn a lot.

Good luck,
Dan

On Wed, Jun 15, 2011 at 10:47 PM, Brian Lavender <br...@brie.com> wrote:

> Dan, thank you for pointing that out. That makes more sense. So, it looks
> like now that my List of Cheeses will not get cached between pages saving
> space? And this is because the model doesn't do anything for detach but
> only does load, so every time, it will get it from the DAO?
>
> Here is the code for my index page. Supporting code files are attached.
>
> public class Index extends CheesrPage {
> public Index() {
>
>        CheeseDAO dao = new CheeseDAOImpl();
>        CheeseDetach myDetach = new CheeseDetach(dao);
>
>        CheeseList myCheeseList = new CheeseList("cheeses", myDetach,
> getCart());
>         add(myCheeseList);
>
> [snip]
> }
>
> On Wed, Jun 15, 2011 at 06:35:25PM -0700, Dan Retzlaff wrote:
> > Look carefully at the ListView's constructor arguments. It wants an
> > IModel<List<Cheese>>, not an IModel<Cheese> which is what your current
> > CheeseDetach provides. Depending on your goals, you can either (1) change
> > CheeseDetach.load() to call getCheeses(), or (2) change the constructor
> to
> > accept a list of cheeses and retain a list of cheese IDs, and query for
> > those cheeses individually in CheeseDetach.load().
> >
> > On Wed, Jun 15, 2011 at 5:38 PM, Brian Lavender <br...@brie.com> wrote:
> >
> > > I am trying to create a ListView using a detachable model, but I just
> > > can't seem to figure out how to construct my DetachableModel.
> Basically, I
> > > would like to create a detachable model and then pass it to my
> constructor
> > > for a CheeseList.  This is built upon the code for the  examples for
> > > Wicket in Action [1] by Dashorst in Chapter 4.3.  My DAO can return the
> > > cheese based upon id or it can also return the list of cheeses. What
> > > code do I need to put in CheeseDetach for my detachable model?
> > >
> > >
> > >         CheeseDAO myDAO = new CheeseDAOImpl();
> > >
> > >         // Can I make CheeseDetach construct it using the DAO as
> follows?
> > >         CheeseDetach myDetach = new CheeseDetach(myDAO);
> > >
> > >          // ListView can take list or Model as constructor.
> > >          // How does the model work for a ListView?
> > >          CheeseList myCheeseList = new CheeseList("cheeses", myDetach,
> > > getCart());
> > >
> > >          // Add ListView to page
> > >
> > >          add(myCheeseList);
> > >
> > >
> > > 1. https://code.google.com/p/wicketinaction/downloads/list
> > > --
> > > Brian Lavender
> > > http://www.brie.com/brian/
> > >
> > > "There are two ways of constructing a software design. One way is to
> > > make it so simple that there are obviously no deficiencies. And the
> other
> > > way is to make it so complicated that there are no obvious
> deficiencies."
> > >
> > > Professor C. A. R. Hoare
> > > The 1980 Turing award lecture
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> > > For additional commands, e-mail: users-help@wicket.apache.org
> > >
>
> --
> Brian Lavender
> http://www.brie.com/brian/
>
> "There are two ways of constructing a software design. One way is to
> make it so simple that there are obviously no deficiencies. And the other
> way is to make it so complicated that there are no obvious deficiencies."
>
> Professor C. A. R. Hoare
> The 1980 Turing award lecture
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>

Re: How do I create a detachable model for a ListView?

Posted by Brian Lavender <br...@brie.com>.
Dan, thank you for pointing that out. That makes more sense. So, it looks
like now that my List of Cheeses will not get cached between pages saving
space? And this is because the model doesn't do anything for detach but
only does load, so every time, it will get it from the DAO?

Here is the code for my index page. Supporting code files are attached.

public class Index extends CheesrPage {
public Index() {

	CheeseDAO dao = new CheeseDAOImpl();
	CheeseDetach myDetach = new CheeseDetach(dao);

	CheeseList myCheeseList = new CheeseList("cheeses", myDetach, getCart());
	add(myCheeseList);

[snip]
}

On Wed, Jun 15, 2011 at 06:35:25PM -0700, Dan Retzlaff wrote:
> Look carefully at the ListView's constructor arguments. It wants an
> IModel<List<Cheese>>, not an IModel<Cheese> which is what your current
> CheeseDetach provides. Depending on your goals, you can either (1) change
> CheeseDetach.load() to call getCheeses(), or (2) change the constructor to
> accept a list of cheeses and retain a list of cheese IDs, and query for
> those cheeses individually in CheeseDetach.load().
> 
> On Wed, Jun 15, 2011 at 5:38 PM, Brian Lavender <br...@brie.com> wrote:
> 
> > I am trying to create a ListView using a detachable model, but I just
> > can't seem to figure out how to construct my DetachableModel. Basically, I
> > would like to create a detachable model and then pass it to my constructor
> > for a CheeseList.  This is built upon the code for the  examples for
> > Wicket in Action [1] by Dashorst in Chapter 4.3.  My DAO can return the
> > cheese based upon id or it can also return the list of cheeses. What
> > code do I need to put in CheeseDetach for my detachable model?
> >
> >
> >         CheeseDAO myDAO = new CheeseDAOImpl();
> >
> >         // Can I make CheeseDetach construct it using the DAO as follows?
> >         CheeseDetach myDetach = new CheeseDetach(myDAO);
> >
> >          // ListView can take list or Model as constructor.
> >          // How does the model work for a ListView?
> >          CheeseList myCheeseList = new CheeseList("cheeses", myDetach,
> > getCart());
> >
> >          // Add ListView to page
> >
> >          add(myCheeseList);
> >
> >
> > 1. https://code.google.com/p/wicketinaction/downloads/list
> > --
> > Brian Lavender
> > http://www.brie.com/brian/
> >
> > "There are two ways of constructing a software design. One way is to
> > make it so simple that there are obviously no deficiencies. And the other
> > way is to make it so complicated that there are no obvious deficiencies."
> >
> > Professor C. A. R. Hoare
> > The 1980 Turing award lecture
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> > For additional commands, e-mail: users-help@wicket.apache.org
> >

-- 
Brian Lavender
http://www.brie.com/brian/

"There are two ways of constructing a software design. One way is to
make it so simple that there are obviously no deficiencies. And the other
way is to make it so complicated that there are no obvious deficiencies."

Professor C. A. R. Hoare
The 1980 Turing award lecture

Re: How do I create a detachable model for a ListView?

Posted by Dan Retzlaff <dr...@gmail.com>.
Look carefully at the ListView's constructor arguments. It wants an
IModel<List<Cheese>>, not an IModel<Cheese> which is what your current
CheeseDetach provides. Depending on your goals, you can either (1) change
CheeseDetach.load() to call getCheeses(), or (2) change the constructor to
accept a list of cheeses and retain a list of cheese IDs, and query for
those cheeses individually in CheeseDetach.load().

On Wed, Jun 15, 2011 at 5:38 PM, Brian Lavender <br...@brie.com> wrote:

> I am trying to create a ListView using a detachable model, but I just
> can't seem to figure out how to construct my DetachableModel. Basically, I
> would like to create a detachable model and then pass it to my constructor
> for a CheeseList.  This is built upon the code for the  examples for
> Wicket in Action [1] by Dashorst in Chapter 4.3.  My DAO can return the
> cheese based upon id or it can also return the list of cheeses. What
> code do I need to put in CheeseDetach for my detachable model?
>
>
>         CheeseDAO myDAO = new CheeseDAOImpl();
>
>         // Can I make CheeseDetach construct it using the DAO as follows?
>         CheeseDetach myDetach = new CheeseDetach(myDAO);
>
>          // ListView can take list or Model as constructor.
>          // How does the model work for a ListView?
>          CheeseList myCheeseList = new CheeseList("cheeses", myDetach,
> getCart());
>
>          // Add ListView to page
>
>          add(myCheeseList);
>
>
> 1. https://code.google.com/p/wicketinaction/downloads/list
> --
> Brian Lavender
> http://www.brie.com/brian/
>
> "There are two ways of constructing a software design. One way is to
> make it so simple that there are obviously no deficiencies. And the other
> way is to make it so complicated that there are no obvious deficiencies."
>
> Professor C. A. R. Hoare
> The 1980 Turing award lecture
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>