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]

Reply via email to