In the Button.onSubmit do getForm.visitChildren(FormComponent.class,
new IVisitor()
{
   public Object component(Component component)
   {
      //do something with the models from the components here.
   }
}

Maurice

On Fri, Jun 13, 2008 at 2:10 PM, wfroud <[EMAIL PROTECTED]> wrote:
>
> Hi All,
>
> I have successfully written some code to create a dynamic form depending on
> drop down selection.
>
> I have used the technique described here
> http://cwiki.apache.org/WICKET/forms-with-dynamic-elements.html
>
> A shortened copy of the code is below.
>
> The problem I'm now having is how to extract data entered into the
> dynamically generated components.
> I'm starting with trying to get information from the TextField component, so
> any help regarding
> this would be of enormous help. Please refer to the TODO comments below, I
> think I'm close.
>
>
> // Define a model to hold values for any component, at the moment just the
> TextField.
>
> final ComponentPanelModel compPanelModel = new ComponentPanelModel();
>
> // Define the list model.
>
> final List paramsList = getParamPanels(queryDef, compPanelModel);
>
> IModel paramsModel = new LoadableDetachableModel() {
>        protected Object load() {
>                return paramsList;
>        }
> };
>
> // Then add the list to the page.
>
> f.add(new ListView("paramsList", paramsModel) {
>
>        @Override
>        public ListView setReuseItems(boolean arg) {
>                // According to 
> http://cwiki.apache.org/WICKET/using-listviews.html
>                // we need to add this or items will be removed and re-added,
>                // without being validated.
>                return super.setReuseItems(true);
>        }
>
>        @Override
>        protected void populateItem(ListItem item) {
>                Panel p = (Panel) item.getModelObject();
>                item.setModel(new CompoundPropertyModel(p));
>                item.add(p);
>        }
>
>        private void optimizedItemRemoval() {
>                // According to
> http://cwiki.apache.org/WICKET/forms-with-dynamic-elements.html
>                // this should be used to prevent components from forgetting 
> content.
>                // Not sure how to yet.
>        }
> });
>
> // This is the method that returns the various panels:
>
> public List getParamPanels(QueryDef queryDef, ComponentPanelModel compModel)
> {
>
>                List<Panel> params = new ArrayList<Panel>();
>                if (queryDef == null) {
>                        return params;
>                }
>
>                List<QueryDefParam> qdp =
> queryDefParamDao.getQueryDefParams(queryDef.getQueryDefId());
>
>                for (QueryDefParam p : qdp) {
>
>                        if ("TextField".equals(p.getName())) {
>                                params.add(new TextFieldPanel("panel", new
> CompoundPropertyModel(compModel), p.getDescription()));
>                        }
>                        else if ("CheckBox".equals(p.getName())) {
>                                params.add(new CheckBoxPanel("panel", null, 
> p.getDescription()));
>                        }
>
>                }
>
>                return params;
> }
>
> f.add(new Button("save") {
>        public void onSubmit() {
>
>                // TODO Iterate through the list of panels, which may differ 
> TextField,
> Check box etc.
>                // TODO For each one we need to be able to access the model 
> objects value.
>
>        }
> });
>
>
> public class ComponentPanelModel {
>        private String textField;
>
>        public String getTextField() {
>                return textField;
>        }
>
>        public void setTextField(String textField) {
>                this.textField = textField;
>        }
> }
>
> public class TextFieldPanel extends Panel {
>        public TextFieldPanel(String name, IModel model, String description) {
>                super(name, model);
>                add(new TextField("textField"));
>                add(new Label("description", description));
>        }
> }
>
> public class CheckBoxPanel extends Panel {
>   public CheckBoxPanel(String name, IModel model, String description) {
>           super(name, model);
>           add(new CheckBox("checkBox", new Model()));
>           add(new Label("description", description));
>   }
> }
>
> Thanks again.
>
> Will
> --
> View this message in context: 
> http://www.nabble.com/Dynamic-Form-Data-Retrieval-tp17822033p17822033.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to