Hi James

Point(s) noted. I have got something going here and it is working but is
this what you meant? Please see attached code and do bear with my questions.

The variable studyReference which is the one that is wrapped within a
PropertyModel, remains or maintains the same reference even if the object
model is changed. So that is the key I suppose not to change the study
reference bound to the DDC any time and we wrap this in a property model.

Still have to get to grips with Models.

Thanks for the help
Cheers
Niv

/* Form that contains the dropdown other form fields*/
public class LookupForm extends Form{

        private TextField<String> studyName;
        private TextField<String> chiefName;
        private AjaxButton lookupButton;
        private DropDownChoice<StudyStatus> studyStatusDpChoices;
        

        
        public LookupForm(String id,Model<StudyContainer> model){
                super(id,model);
        }
        public void initForm(){
                
                Model<StudyContainer> studyContainerModel = (Model)getModel();
                
                //Create a propertyModel to bind the components of this form, 
the root which is StudyContainer
                PropertyModel<Study> pm = new 
PropertyModel<Study>(studyContainerModel,"study");
                
                //Just to know what the initial study reference is
                final Study studyReference  = pm.getObject();
                
                studyName = new TextField("studyName",new 
PropertyModel<String>(pm,"studyName"));//Create another new PropertyModel of 
type Study
                chiefName = new TextField("chiefName", new 
PropertyModel<String>(pm,"chiefName"));

                lookupButton = new AjaxButton("search"){
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
                                Model<StudyContainer> iModel  = 
(Model)getModel();
                                doLookup(target,studyReference);
                        }
                };
                
                
                ChoiceRenderer defaultChoiceRenderer = new 
ChoiceRenderer("name", "studyStatusKey");
                
                //Another PropertyModel for rendering the DropDowns and pass in 
the Property Model instance of type Study
                PropertyModel<Study> pmStudyStatus = new 
PropertyModel<Study>(pm,"studyStatus");
                
                //Static list
                List<StudyStatus> studyStatusList = new 
ArrayList<StudyStatus>();
                StudyStatus ss = new StudyStatus();
                ss.setName("Active");
                ss.setStudyStatusKey(new Long("1"));
                studyStatusList.add(ss);
                ss = new StudyStatus();
                ss.setName("Inactive");
                ss.setStudyStatusKey(new Long("2"));
                studyStatusList.add(ss);
                
                studyStatusDpChoices = new 
DropDownChoice("studyStatusDDC",pmStudyStatus,studyStatusList,defaultChoiceRenderer);
                
                add(studyName);
                add(chiefName);
                add(studyStatusDpChoices);
                add(lookupButton);
        }
                
        protected void doLookup(AjaxRequestTarget target, Study study){}

}



public class Lookup extends Panel{

        Model<StudyContainer> studyContainerModel;
        public Lookup(String id) {
                super(id);
        }
        public void initialise(){
                
                studyContainerModel = new Model<StudyContainer>( new 
StudyContainer());
                
                LookupForm lookupForm = new LookupForm("lookupForm", 
studyContainerModel){
                        
                        protected void doLookup(AjaxRequestTarget target, Study 
studyReference){
                                
                                
                                StudyContainer studyContainer  =  
(StudyContainer)this.getModelObject();
                                
                                //Get the currently populates study info
                                Study currentStudy = studyContainer.getStudy();
                                
                                System.out.println(currentStudy.getChiefName());
                                
                                StudyStatus status = 
currentStudy.getStudyStatus();
                                System.out.println(status.getName());
                                
                                //Simulate a user's select operation and reset 
the study
                                StudyContainer newOne = new StudyContainer();
                                Study selectedStudy = new Study();
                                selectedStudy.setChiefName("Testing");
                                selectedStudy.setStudyName("Testing");
                                newOne.setStudy(selectedStudy);
                                this.setModelObject(newOne);//Set it with the 
new model object with the study that was selected
                                
                                //The studyReference instance always refers to 
the original study that was used to populate the drop down never changes
                                String studyRefDetails = 
studyReference.getStudyName() + " " + studyReference.getStudyStatus().getName();
                                
                                System.out.println("\n: 2:"+ studyRefDetails);
                        }
                        
                };
                lookupForm.initForm();
                add(lookupForm);
        }
        
        
}

public class StudyContainer implements Serializable{
        
        private Study study;
        private List<Study> studyList;
        
        /**
         * Constructor
         */
        public StudyContainer(){
                study = new Study();
                studyList = new ArrayList<Study>();
        }
        
        //Accessor for study
        public Study getStudy() {
                return study;
        }
        public void setStudy(Study study) {
                this.study = study;
        }
        
        //Accessor for study List
        public List<Study> getStudyList() {
                return studyList;
        }
        public void setStudyList(List<Study> studyList) {
                this.studyList = studyList;
        }
        
}


-- 
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/DropDownChoice-does-not-push-value-into-Model-tp2323809p2328046.html
Sent from the Wicket - User mailing list archive at Nabble.com.

Reply via email to