Let me see if I understand what you say.
I should build the form inside a component instead the page. And I
should keep a reference
to the dynamic model inside this component.
This makes sense for me but I find one problem. Where do I read the
renderer parameter?
Because this code gets executed in the main page.
---------------------------- CODE ----------------------------
// Get render parameter
String value =
((PortletRequestContext)RequestContext.get()).getPortletRequest().getParameter("crmportal:userId");
--------------------------------------------------------------
I can do it in submit but then I should be able to communicate it to the
new component and
make it render again.
Is there a common way to do this in wicket?
Thank you
El mar, 03-11-2009 a las 08:00 -0200, Pedro Santos escribió:
> > But when I submit the form the constructer gets not called anymore.
> this is an expected behavior, an component instance is held on pagemap
> between requests.
>
> > But as I have to build the form I do not have a dynamic model on page.
> Can't you manage an instance of an dynamic model on your component,
> independent of your form build logic? You can. Figure out the best way to
> your component. You can simple keep this model on an instance variable for
> example.
>
> On Tue, Nov 3, 2009 at 7:22 AM, Gonzalo Aguilar Delgado <
> [email protected]> wrote:
>
> > Hello Again!
> >
> > I have a form that I build dynamically based on a render parameter
> > value. I'm using
> > http://cwiki.apache.org/WICKET/forms-with-dynamic-elements.html
> >
> >
> > I use the constructor:
> >
> > /**
> > * Constructor
> > */
> > public ViewModePage()
> > {
> >
> > ...
> >
> > // Get render parameter
> > String value =
> >
> > ((PortletRequestContext)RequestContext.get()).getPortletRequest().getParameter("crmportal:userId");
> > ...
> > // Check for a valid answer from this customer
> > if(value!=null && value.length()>0)
> > {
> > log.debug("Value length: " + value.length());
> > User user =
> > userDAOBean.find(UuidUserType.fromString(value));
> >
> > if(user!=null)
> > {
> > answer = getLastAnswer(1,user);
> > if(answer!=null)
> > {
> > buildForm(answer);
> > surveySubmitButton.setEnabled(true);
> > }
> > }
> > }
> > ...
> >
> > }
> >
> > ------------------------------------------------------------------------------------
> >
> > buildForm(answer); gets the form build based on the user answer
> >
> > The problem as you can figure out. It works as I do nothing with the
> > form... But when I submit the form the constructer gets not
> > called anymore. So no matter what's the value it will get not updated to
> > the new one.
> >
> > The GREAT book "wicket in action" explained this issue well. You have to
> > use dynamic models:
> >
> >
> > ---------------------------- CODE ----------------------------------
> > In chapter 4, we’ll discuss the differences between static models
> > and dynamic mod-
> > els (the issue at hand) in greater depth. For now, we’ll solve the
> > problem by providing
> > the label with a model that calculates its value every time it’s
> > requested:
> >
> > add(new Label("total", new Model() {
> > @Override
> > public Object getObject() {
> > NumberFormat nf = NumberFormat.getCurrencyInstance();
> > return nf.format(getCart().getTotal());
> > }
> > }));
> >
> > -------------------WICKET IN ACTION ----------------------------
> >
> >
> > But as I have to build the form I do not have a dynamic model on page.
> > So how do I make the form gets updated each time
> > the page it's rendered without disturbing Wicket normal behaviour?
> >
> > Do I explain myself?
> >
> > Thank you all in advance.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>