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 < > gagui...@aguilardelgado.com> 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. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >