sorry.. Did'nt see it attached.. So did igor provide you with an fixed quickstart (working on his system).. That did not work on glassfish?
2010/10/12 Shelli Orton <shelli.or...@sjrb.ca> > The quickstart was sent to the list this morning at 10:04 MST. Does it > need to be resent? > > Shelli > > -----Original Message----- > From: nino martinez wael [mailto:nino.martinez.w...@gmail.com] > Sent: Tuesday, October 12, 2010 11:52 AM > To: users@wicket.apache.org > Subject: Re: PropertyModel Not Refreshing > > No dont think so.. Please provide a quickstart.. I have had property > models > working in 1.2, 1.3, 1.4 and 1.5 so must be error 42:) > > 2010/10/12 Shelli Orton <shelli.or...@sjrb.ca> > > > Hi, > > > > Thanks for file. Your first email was missing these changes: > > > > IModel<RecordA> selectedRecordAModel; (I had set mine to > > PropertyModel<RecordA> selectedRecordAModel;) > > recordAs.setModel(selectedRecordAModel) > > > > However, even with those changes applied, I still get the same issue > of the > > selected record not updating in the edit group. > > > > I am deploying in Glassfish v3. Could that have anything to do with > my > > problems? > > > > Shelli > > > > -----Original Message----- > > From: Igor Vaynberg [mailto:igor.vaynb...@gmail.com] > > Sent: Tuesday, October 12, 2010 11:35 AM > > To: users@wicket.apache.org > > Subject: Re: PropertyModel Not Refreshing > > > > On Tue, Oct 12, 2010 at 10:30 AM, Shelli Orton <shelli.or...@sjrb.ca> > > wrote: > > > Thanks for the help. Your changes got rid of the errors and I can > delete > > records now (and the list is updated). > > > > > > However, once a record has been selected for edit and either saved > or > > cancelled, that same record is always displayed in the edit group when > I > > choose another record to edit or even when I try to create a new one. > I can > > even delete the chosen record and it still displays in the edit group. > > > > works fine here, meaning you did not completely/propery apply my > > changes. below is the complete file. > > > > -igor > > > > public class RecordAPanel extends Panel > > { > > private static final long serialVersionUID = 1L; > > > > RecordAService recordAService; > > RecordBService recordBService; > > > > RecordA selectedRecordA = new RecordA(); > > IModel<RecordA> selectedRecordAModel; > > String unmodifiedRecordA; > > > > boolean isNew = false; > > > > WebMarkupContainer selectGroup; > > WebMarkupContainer editGroup; > > > > Form selectForm; > > Form editForm; > > > > DropDownChoice<RecordA> recordAs; > > DropDownChoice<RecordB> recordBs; > > > > Button add; > > Button edit; > > Button save; > > Button delete; > > Button cancel; > > > > Label editLegendLabel; > > String editLegend; > > Label recordALabel; > > Label recordBLabel; > > > > RequiredTextField recordAText; > > > > @SuppressWarnings({ "rawtypes", "unchecked" }) > > public RecordAPanel(String id) > > { > > super(id); > > > > recordAService = ((Application) > > RequestCycle.get().getApplication()).getRecordAService(); > > recordBService = ((Application) > > RequestCycle.get().getApplication()).getRecordBService(); > > > > selectedRecordAModel = new PropertyModel<RecordA>(this, > > "selectedRecordA"); > > this.setDefaultModel(selectedRecordAModel); > > > > // ************* Select Group ************* > > > > selectGroup = new WebMarkupContainer("selectGroup"); > > selectForm = new Form("selectForm"); > > > > recordAs = new DropDownChoice<RecordA>("recordAs"); > > recordAs.setModel(selectedRecordAModel); > > recordAs.setChoices(recordAsModel); > > recordAs.setChoiceRenderer(new RecordARenderer()); > > > > // recordAs = (DropDownChoice<RecordA>) new > > DropDownChoice<RecordA>("recordAs", > > // new PropertyModel<RecordA>(this, > > "selectedRecordA"), > > // recordAsModel, > > // new RecordARenderer()); > > > > recordAs.setNullValid(false); > > > > selectForm.add(recordAs); > > > > add = new Button("add") > > { > > private static final long serialVersionUID = 1L; > > > > public void onSubmit() > > { > > setSelectedRecordA(new RecordA()); > > isNew = true; > > editLegend = "New"; > > editGroup.setVisible(true); > > selectGroup.setVisible(false); > > } > > }; > > > > selectForm.add(add); > > > > edit = new Button("edit") > > { > > private static final long serialVersionUID = 1L; > > > > public void onSubmit() > > { > > if (selectedRecordA == null) > > { > > info("You must select a record to edit."); > > } > > else > > { > > unmodifiedRecordA = selectedRecordA.getName(); > > isNew = false; > > editLegend = "Edit"; > > editGroup.setVisible(true); > > selectGroup.setVisible(false); > > } > > } > > }; > > > > selectForm.add(edit); > > > > delete = new Button("delete") > > { > > private static final long serialVersionUID = 1L; > > > > public void onSubmit() > > { > > if (selectedRecordA == null) > > { > > info("You must select a record to delete."); > > } > > else > > { > > // Delete the selected record > > unmodifiedRecordA = selectedRecordA.getName(); > > recordAService.delete(selectedRecordA.getName()); > > selectedRecordA = null; > > info("Deleted '" + unmodifiedRecordA + "'"); > > > > // Force refresh of records list > > RecordAPanel.this.recordAsModel.detach(); > > } > > } > > }; > > > > // Add confirmation dialog box > > delete.add(new SimpleAttributeModifier("onclick", > > "if (!confirm('Please confirm you want to delete this > > record') ){ return false; }")); > > > > selectForm.add(delete); > > selectGroup.add(selectForm); > > > > this.add(selectGroup); > > > > // ************* Edit Group ************* > > > > editGroup = new WebMarkupContainer("editGroup"); > > > > editLegendLabel = new Label("editLegend", new > PropertyModel(this, > > "editLegend")); > > > > editGroup.add(editLegendLabel); > > > > editForm = new Form("editForm"); > > > > recordALabel = new Label("recordALabel", "Record A"); > > editForm.add(recordALabel); > > > > recordBLabel = new Label("recordBLabel", "Record B"); > > editForm.add(recordBLabel); > > > > recordAText = new RequiredTextField("recordAText", > > new PropertyModel(selectedRecordAModel, "name")); > > > > editForm.add(recordAText); > > > > recordBs = new DropDownChoice<RecordB>("recordBs"); > > recordBs.setModel(new PropertyModel(selectedRecordAModel, > > "recordB")); > > recordBs.setChoices(RecordAPanel.this.getRecordBs()); > > recordBs.setChoiceRenderer(new RecordBRenderer()); > > > > editForm.add(recordBs); > > > > save = new Button("save") > > { > > private static final long serialVersionUID = 1L; > > > > @Override > > public void onSubmit() > > { > > if (isNew) > > { > > > > recordAService.create(RecordAPanel.this.selectedRecordA); > > info("Created '" > > + > > RecordAPanel.this.selectedRecordA.getName() > > + "'"); > > } > > else > > { > > recordAService.update(unmodifiedRecordA, > > RecordAPanel.this.selectedRecordA); > > info("Updated '" > > + > > RecordAPanel.this.selectedRecordA.getName() > > + "'"); > > } > > > > // TODO Update the dropdown list? > > > > editGroup.setVisible(false); > > selectGroup.setVisible(true); > > } > > }; > > > > editForm.add(save); > > > > cancel = new Button("cancel") > > { > > private static final long serialVersionUID = 1L; > > > > public void onSubmit() > > { > > RecordAPanel.this.selectedRecordA = null; > > editGroup.setVisible(false); > > selectGroup.setVisible(true); > > } > > }; > > > > cancel.setDefaultFormProcessing(false); > > editForm.add(cancel); > > > > editGroup.add(editForm); > > > > editGroup.setVisible(false); > > this.add(editGroup); > > } > > > > public RecordA getSelectedRecordA() > > { > > return selectedRecordA; > > } > > > > public void setSelectedRecordA(RecordA selectedRecordA) > > { > > this.selectedRecordA = selectedRecordA; > > } > > > > public LoadableDetachableModel<List<RecordA>> recordAsModel = new > > LoadableDetachableModel<List<RecordA>>() > > { > > private static final long serialVersionUID = 1L; > > > > @Override > > protected List<RecordA> load() > > { > > return recordAService.getList(); > > } > > > > public void detach() > > { > > super.detach(); > > } > > }; > > > > // TODO change this to LDM? > > List<RecordB> getRecordBs() > > { > > return recordBService.getList(); > > } > > > > class RecordARenderer implements IChoiceRenderer<RecordA> > > { > > private static final long serialVersionUID = 1L; > > > > public Object getDisplayValue(RecordA recordA) > > { > > return recordA.getName(); > > } > > > > public String getIdValue(RecordA recordA, int index) > > { > > return recordA.getName(); > > } > > } > > > > class RecordBRenderer implements IChoiceRenderer<RecordB> > > { > > private static final long serialVersionUID = 1L; > > > > public Object getDisplayValue(RecordB recordB) > > { > > return recordB.getName(); > > } > > > > public String getIdValue(RecordB recordB, int index) > > { > > return recordB.getName(); > > } > > } > > } > > > > > > > > Shelli > > > > > > -----Original Message----- > > > From: Igor Vaynberg [mailto:igor.vaynb...@gmail.com] > > > Sent: Tuesday, October 12, 2010 10:38 AM > > > To: users@wicket.apache.org > > > Subject: Re: PropertyModel Not Refreshing > > > > > > here are the tweaks you need to make this work: > > > > > > selectedRecordAModel = new PropertyModel<RecordA>(this, > > "selectedRecordA"); > > > > > > recordAText = new RequiredTextField("recordAText", > > > new PropertyModel(selectedRecordAModel, "name")); > > > > > > recordBs.setModel(new PropertyModel(selectedRecordAModel, > "recordB")); > > > > > > have fun > > > > > > -igor > > > > > > On Tue, Oct 12, 2010 at 9:03 AM, Shelli Orton <shelli.or...@sjrb.ca> > > wrote: > > >> I've been able to create a sample application that exhibits the > > >> same/similar problems to mine. The sample makes use of an > in-memory > > >> list for the data versus accessing a database and so there's some > > >> differences. However, I believe the problems that this sample > exhibits > > >> have the same root cause as my project (which I believe have > something > > >> to do with how my models are set up...). > > >> > > >> Issues this sample exhibits: > > >> > > >> 1. Choose to edit an existing record, then cancel the edit. Choose > > >> another/the same record to edit and the selected record is null > (error > > >> message "You must select a record to edit" is displayed). Must > > >> close/open session to reset. > > >> > > >> 2. Choose to edit an existing record and save the edit. Choose > > >> another/the same record to edit and you get a NPE: > > >> > > >> WicketMessage: Method onFormSubmitted of interface > > >> org.apache.wicket.markup.html.form.IFormSubmitListener targeted at > > >> component [MarkupContainer [Component id = selectForm]] threw an > > >> exception > > >> > > >> Root cause: > > >> > > >> java.lang.NullPointerException > > >> at > > >> > org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.convertCho > > >> iceIdToChoice(AbstractSingleSelectChoice.java:247) > > >> > > >> 3. Create a new record and try to save it and get > > >> WicketRuntimeException: > > >> > > >> WicketMessage: Attempted to set property value on a null object. > > >> Property expression: name Value: New One > > >> > > >> Root cause: > > >> > > >> org.apache.wicket.WicketRuntimeException: Attempted to set > property > > >> value on a null object. Property expression: name Value: New One > > >> at > > >> > org.apache.wicket.util.lang.PropertyResolver.setValue(PropertyResolver.j > > >> ava:125) > > >> > > >> 4. Create a new record and then cancel the add, Choose an existing > > >> record to edit and the selected record is null (error message "You > must > > >> select a record to edit" is displayed). Must close/open session to > > >> reset. > > >> > > >> As always, all help is greatly appreciated as I am stumped. > > >> > > >> Thanks, > > >> Shelli > > >> > > >> -----Original Message----- > > >> From: jcgarciam [mailto:jcgarc...@gmail.com] > > >> Sent: Friday, October 08, 2010 1:41 PM > > >> To: users@wicket.apache.org > > >> Subject: Re: PropertyModel Not Refreshing > > >> > > >> > > >> The attachment didn't make it, > > >> > > >> Can you try to extract out the relevant part and creates a > quickstart > > >> project that actually reproduces your issue? > > >> > > >> > > >> On Fri, Oct 8, 2010 at 1:41 PM, Shelli Orton [via Apache Wicket] < > > >> > ml-node+2968688-305091622-65...@n4.nabble.com<ml-node%2b2968688-305091622-65...@n4.nabble.com> > <ml-node%2B2968688-30509162 > 2-65...@n4.nabble.com> > > <ml-node%2B2968688-30509162 > > >> 2-65...@n4.nabble.com> > > >>> wrote: > > >> > > >>> Hi, > > >>> > > >>> I have been trying different things to see if I could get my code > to > > >> work > > >>> (and understand Wicket models better), but am still stuck. I have > a > > >>> attached the (latest) panel class code which I hope is sufficient > to > > >> help. > > >>> > > >>> I was reading about different models (both online and the Wicket > in > > >> Action > > >>> book) and thought that perhaps using a CompoundPropertyModel was > more > > >>> appropriate and may help with my issues. Originally, I only > declared > > >>> selectedRecordA (line 40) but didn't instantiate it. The select > group > > >>> displayed properly but when I chose a record from the list and > tried > > >> to edit > > >>> it, this exception was thrown: > > >>> > > >>> WicketMessage: Attempted to set property value on a null > object. > > >>> Property expression: recordA Value: Name=A-One > > >>> Root cause: > > >>> > > >>> org.apache.wicket.WicketRuntimeException: Attempted to set > > >> property > > >>> value on a null object. Property expression: recordA Value: > Name=A-One > > >>> at > > >>> > > >> > org.apache.wicket.util.lang.PropertyResolver.setValue(PropertyResolver.j > > >> ava:125) > > >>> > > >>> at > > >>> > > >> > org.apache.wicket.model.AbstractPropertyModel.setObject(AbstractProperty > > >> Model.java:169) > > >>> > > >>> at > > >>> > org.apache.wicket.Component.setDefaultModelObject(Component.java:3125) > > >>> .... > > >>> > > >>> I set breakpoints on the getSelectedRecordA and setSelectedRecordA > > >> methods, > > >>> but these aren't called when during the request cycle when the > edit > > >> button > > >>> is clicked. > > >>> > > >>> I then changed the class so that selectedRecordA is initialized to > an > > >> empty > > >>> instance of RecordA. This got rid of the above error. However, I > > >> cannot > > >>> save the edit changes because the selectedRecordA is still the > empty > > >>> instance that was created in the initialization and the > persistence > > >> layer > > >>> throws an exception. This same problem exists if I try to add a > new > > >> RecordA > > >>> or try to delete an existing one. > > >>> > > >>> If I choose to cancel the edit and then select another record to > edit, > > >> I > > >>> get the message "You must select a record to edit" (line 131). > This > > >> is > > >>> because the cancel onSubmit sets selectedRecordA to null and > choosing > > >> the > > >>> record from the DDC is not setting it to the chosen record. > > >>> > > >>> Clearly I am not setting up this CompoundPropertyModel properly so > > >> that the > > >>> selectedARecord is set by the model. Can someone tell me what I'm > > >> doing > > >>> wrong? > > >>> > > >>> All help is greatly appreciated, > > >>> > > >>> Shelli > > >>> > > >>> > > >>> -----Original Message----- > > >>> From: Igor Vaynberg [mailto:[hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=0>] > > >>> > > >>> Sent: Thursday, October 07, 2010 11:27 AM > > >>> To: [hidden email] > > >> <http://user/SendEmail.jtp?type=node&node=2968688&i=1> > > >>> Subject: Re: PropertyModel Not Refreshing > > >>> > > >>> you have posted an incomplete piece of code and somehow from that > we > > >>> are supposed to guess what is not working? create a quickstart and > > >>> provide that. > > >>> > > >>> -igor > > >>> > > >>> On Thu, Oct 7, 2010 at 10:15 AM, Shelli Orton <[hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=2>> > > >>> wrote: > > >>> > > >>> > Does nobody have any suggestions? If I can't get this fixed, > I'm > > >> going > > >>> > to have to write the app in another framework (possibly GWT) and > I'd > > >>> > really rather not have to do that. > > >>> > > > >>> > Shelli > > >>> > > > >>> > -----Original Message----- > > >>> > From: Shelli Orton > > >>> > Sent: Wednesday, October 06, 2010 3:52 PM > > >>> > To: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=3> > > >>> > Subject: PropertyModel Not Refreshing > > >>> > > > >>> > Hi, > > >>> > > > >>> > First, thanks to all who have been helping me as I am new to > Wicket. > > >> I > > >>> > am splitting out two issues I am dealing with to try to keep > things > > >>> > clear. > > >>> > > > >>> > I am trying to write a simple app that does CRUD operations on > > >> database > > >>> > records. The goal is for the app to make use of a tab panel > where > > >> each > > >>> > tab encapsulates one table from the database. Each tab panel > has > > >> two > > >>> > groups (WebMarkupContainer). The first, selectGroup, displays a > > >> list > > >>> > (DDC) of the current items, and three buttons, add, edit and > delete. > > >>> > The second, editGroup, is displayed when either the add or edit > > >> button > > >>> > was clicked on the select group, displays the record attributes > and > > >> save > > >>> > and cancel buttons. The tab panel has a "selectedRecord" which > is > > >> used > > >>> > by both groups' components via PropertyModels. Very basic stuff. > > >>> > > > >>> > When I choose a record and click the edit button, the record is > > >>> > displayed in the edit group properly. If I then choose cancel, > the > > >> edit > > >>> > group is no longer displayed and the select group DDC selection > is > > >> null > > >>> > as expected. I then choose another record from the list and > click > > >> the > > >>> > edit button and the previous record information is displayed in > the > > >> edit > > >>> > group even though the select group DDC shows the > correct/selected > > >>> > record. > > >>> > > > >>> > This problem also occurs if I first choose to add a new record > and > > >> then > > >>> > cancel the add and then choose to edit a different record. The > DDC > > >>> > shows the correct/selected record, but all the attributes in the > > >> edit > > >>> > group are null/defaults for a new record. > > >>> > > > >>> > If I remove the call to setDefaultFormProcessing(false) on the > > >> cancel > > >>> > button, selecting other records for edit works correctly, but I > > >> can't > > >>> > cancel a creating a new record if I use a RequiredTextField > because > > >> the > > >>> > form validation fails. > > >>> > > > >>> > If I select a record for editing or save the newly created > record, I > > >> can > > >>> > select a different record for edit or create another one > correctly. > > >> So > > >>> > I must be doing something wrong in the cancel logic. My editForm > > >>> > (created in the EditGroup constructor) looks like this: > > >>> > > > >>> > Form editForm = new Form("editForm"); > > >>> > > > >>> > editForm.add(new Label("nameLabel", "Name")); > > >>> > > > >>> > editForm.add(new Label("attributeLabel", > "Attribute")); > > >>> > > > >>> > editForm.add(new > > >> RequiredTextField<String>("recordNameText", > > >>> > new PropertyModel<String>(MyRecordPanel.this, > > >>> > "selectedRecord.name"))); > > >>> > > > >>> > editForm.add(new DropDownChoice<Lir>("attributes", > > >>> > new > PropertyModel<Attribute>(MyRecordPanel.this, > > >>> > "selectedRecord.attribute"), > > >>> > RateCentrePanel.this.getAttributes(), > > >>> > new AttributeRenderer())); > > >>> > > > >>> > .... > > >>> > > > >>> > editForm.add(new Button("cancel") > > >>> > { > > >>> > private static final long serialVersionUID = 1L; > > >>> > > > >>> > public void onSubmit() > > >>> > { > > >>> > MyRecordPanel.this.selectedRecord = null; > > >>> > editGroup.setVisible(false); > > >>> > selectGroup.setVisible(true); > > >>> > } > > >>> > }.setDefaultFormProcessing(false)); > > >>> > > > >>> > add(editForm); > > >>> > > > >>> > Other than setting the selectedRecord to null, what should I be > > >> doing > > >>> > differently? > > >>> > > > >>> > Thanks in advance! > > >>> > > > >>> > Shelli > > >>> > > > >>> > > > >> > --------------------------------------------------------------------- > > >>> > To unsubscribe, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=4> > > >>> > For additional commands, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=5> > > >>> > > > >>> > > > >>> > > > >> > --------------------------------------------------------------------- > > >>> > To unsubscribe, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=6> > > >>> > For additional commands, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=7> > > >>> > > > >>> > > > >>> > --------------------------------------------------------------------- > > >>> To unsubscribe, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=8> > > >>> For additional commands, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=9> > > >>> > > >>> > > >>> > > >>> > > >>> > --------------------------------------------------------------------- > > >>> To unsubscribe, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=10> > > >>> For additional commands, e-mail: [hidden > > >> email]<http://user/SendEmail.jtp?type=node&node=2968688&i=11> > > >>> > > >>> ------------------------------ > > >>> View message @ > > >>> > > >> > > > http://apache-wicket.1842946.n4.nabble.com/DropDownChoice-Model-Confusio > > >> n-tp2955144p2968688.html > > >>> To start a new topic under Apache Wicket, email > > >>> > > >> > ml-node+1842946-398011874-65...@n4.nabble.com<ml-node%2b1842946-398011874-65...@n4.nabble.com> > <ml-node%2B1842946-39801187 > 4-65...@n4.nabble.com> > > <ml-node%2B1842946-39801187 > > >> 4-65...@n4.nabble.com> > > >>> To unsubscribe from Apache Wicket, click > > >> > here<http://apache-wicket.1842946.n4.nabble.com/template/TplServlet.jtp > > ? > > >> > tpl=unsubscribe_by_code&node=1842946&code=amNnYXJjaWFtQGdtYWlsLmNvbXwxOD > > >> QyOTQ2fDEyNTYxMzc3ODY=>. > > >>> > > >>> > > >>> > > >> > > >> > > >> -- > > >> Sincerely, > > >> JC (http://www.linkedin.com/in/jcgarciam) > > >> Work smarter, not harder!. > > >> > > >> -- > > >> View this message in context: > > >> > > > http://apache-wicket.1842946.n4.nabble.com/DropDownChoice-Model-Confusio > > >> n-tp2955144p2968936.html > > >> Sent from the Users forum mailing list archive at Nabble.com. > > >> > > >> > --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > >> For additional commands, e-mail: users-h...@wicket.apache.org > > >> > > >> > > >> > > >> > --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > >> For additional commands, e-mail: users-h...@wicket.apache.org > > >> > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >