Excuse me i didn't communicate here for a long time so i am a little unfamiliar how to describe my problem here. so i try to describe it here and send you once more the reduced application there is a field i defined with my own EntityModel class IModel<Land> selectedLand=new EntityModel<Land>(Land.class,null); it is set by a DropDownChoice final DropDownChoice<Land> land > = new DropDownChoice<Land>("land",new > PropertyModel<Land>(this,"selectedLand.entity"), the selection of this field sets the Choices of another DropDownChoice by land.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) {orte.setVisible(true); target.add(orte); } }); if i select land but don't select orte and then click at the nextButton when i run with jetty land is still set. when i simulate this behaviour by WicketTester and FormTester
formTester.select("land", 0);tester.getComponentFromLastRenderedPage("form:land").getBehaviors().get(0)); tester.assertVisible("form:orte"); formTester.submit("nextButton"); i found out in nextButton that land is null. Maybe it's my version of EntityModel i send you once more the whole application.Von meinem Samsung Galaxy Smartphone gesendet. -------- Ursprüngliche Nachricht --------Von: Martin Grigorov <mgrigo...@apache.org> Datum: 19.05.16 10:19 (GMT+01:00) An: users@wicket.apache.org, Hans-Heinrich Braun <hansheinrichbr...@yahoo.de> Betreff: Re: FormTester and IModel Sorry, but your email is hardly readable. You may use some pastebin service for the code. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Thu, May 19, 2016 at 10:13 AM, Hans-Heinrich Braun < hansheinrichbr...@yahoo.de.invalid> wrote: > I tested a little bit but the reason is not so obviousthere is a series of > DropDowbFields where each sets the choices for the next protected > IModel<Land> selectedLand=new EntityModel<Land>(Land.class,null); protected > IModel<Orte> selectedOrt=new EntityModel<Orte>(Orte.class,null);; protected > IModel<Strassen> selectedStrasse=new > EntityModel<Strassen>(Strassen.class,null); protected IModel<Objekte> > selectedObjekt=new EntityModel<Objekte>(Objekte.class,null); IModel<List<? > extends Land>>makeChoicesLand= new AbstractReadOnlyModel<List<? extends > Land>>() { @Override public List<Land> getObject() { List<Land> > landlist=new ArrayList<Land>(); if(landManager!=null){ Iterator > landiterator=landManager.getLandes().iterator(); > while(landiterator.hasNext()){ Land land=(Land) landiterator.next(); > landlist.add(land); } } return landlist; } }; private IModel<List<? > extends Orte>> makeChoicesOrt = new AbstractReadOnlyModel<List<? extends > Orte>>() { @Override public List<Orte> getObject() { List<Orte> > ortelist=new ArrayList<Orte>(); try{ if (selectedLand.getObject()!=null){ > Iterator orteiterator=selectedLand.getObject().getOrte().iterator(); > while(orteiterator.hasNext()){ Orte orte=(Orte)orteiterator.next(); > Iterator strasseniterator=orte.getStrassen().iterator(); > while(strasseniterator.hasNext()){ Strassen > strassen=(Strassen)strasseniterator.next(); Iterator > objekteiterator=strassen.getObjekte().iterator(); > while(objekteiterator.hasNext()){ Objekte > objekte=(Objekte)objekteiterator.next(); } } > if(Strings.isEmpty(selectedOrtstring)){ortelist.add(orte);} else{ > if(orte.getOrtname().startsWith(selectedOrtstring, 0)) ortelist.add(orte); > } } } }catch(Exception e){System.err.println(e);} return ortelist; } }; > > > private IModel<List<? extends Strassen>> makeChoicesStrassen = new > AbstractReadOnlyModel<List<? extends Strassen>>() { @Override public > List<Strassen> getObject() { List<Strassen> strassenlist=new > ArrayList<Strassen>(); if (selectedOrt.getObject()!=null){ Iterator > strasseniterator=selectedOrt.getObject().getStrassen().iterator(); > while(strasseniterator.hasNext()){ Strassen > strassen=(Strassen)strasseniterator.next(); > if(Strings.isEmpty(selectedStrassenstring)){strassenlist.add(strassen);} > else{ if(strassen.getStrname().startsWith(selectedStrassenstring, 0)) > strassenlist.add(strassen); } } } return strassenlist; } }; > > > > > private IModel<List<? extends Objekte>> makeChoicesObjekte = new > AbstractReadOnlyModel<List<? extends Objekte>>() { @Override public > List<Objekte> getObject() { List<Objekte> objektelist=new > ArrayList<Objekte>(); if(selectedStrasse.getObject()!=null){ Iterator > objekteiterator=selectedStrasse.getObject().getObjekte().iterator(); > while(objekteiterator.hasNext()){ Objekte > objekte=(Objekte)objekteiterator.next(); objektelist.add(objekte); } } > return objektelist; } }; final DropDownChoice<Objekte> objekte = new > DropDownChoice<Objekte>("objekte",new > PropertyModel<Objekte>(this,"selectedObjekt.entity"), > makeChoicesObjekte,objektechoicerenderer); final DropDownChoice<Land> land > = new DropDownChoice<Land>("land",new > PropertyModel<Land>(this,"selectedLand.entity"), makeChoicesLand,new > ChoiceRenderer<Land>("landname","id")); final DropDownChoice<Orte> orte = > new DropDownChoice<Orte>("orte",new > PropertyModel<Orte>(this,"selectedOrt.entity"), makeChoicesOrt,new > ChoiceRenderer<Orte>("ortname","id")); final DropDownChoice<Strassen> > strassen = new DropDownChoice<Strassen>("strassen",new > PropertyModel<Strassen>(this,"selectedStrasse.entity"), > makeChoicesStrassen,new ChoiceRenderer<Strassen>("strname","id")); First > only land is visible if selected orte becomes visible if this is selected > the next dropdown becomes visible etc. > This is triggered by > land.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override > protected void onUpdate(AjaxRequestTarget target) { > ortemarkup.setVisible(true); target.add(ortemarkup); > textsearchmarkup.setVisible(false); target.add(textsearchmarkup); } }); > orte.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override > protected void onUpdate(AjaxRequestTarget target) { > strassenmarkup.setVisible(true); target.add(strassenmarkup); } }); > > > strassen.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override > protected void onUpdate(AjaxRequestTarget target) { if(withNext==false){ > customCSS = "btn btn-info pull-left col-sm-4 disabled"; customEnabled = > false;} if(whithObjekt==1) { objektemarkup.setVisible(true); > personenmarkup.setVisible(false); } if(whithObjekt==2){ > objektemarkup.setVisible(true); personenmarkup.setVisible(true); } > if(whithObjekt==0){ objektemarkup.setVisible(false); > personenmarkup.setVisible(false); } if(whithObjekt==-1) { > personenmarkup.setVisible(true); objektemarkup.setVisible(false);} > target.add(objektemarkup); target.add(personenmarkup); target.add(onNext); > } });the dropdowns are in Markupcontainers which might be visible or not.In > each position you can hit a nextButton.which looks which selectedFields are > not empty and decides which action to take. > this works in real life and with WicketTester i make the following: > tester.executeUrl("../../wicket/bookmarkable/braunimmobilien.bootstrap.webapp.pages.breadcrumb.IndexBootstrap?objid=null"); > tester.assertRenderedPage(IndexBootstrap.class); FormTester formTester = > tester.newFormTester("panel:form"); > Assert.assertEquals("",formTester.getForm().getClass().getSimpleName(),"StrassenSucheForm"); > tester.assertInvisible("panel:form:ortemarkup:orte"); > tester.assertInvisible("panel:form:eigentuemertypmarkup:eigentuemertyp"); > tester.assertVisible("panel:form:landmarkup:land"); > formTester.select("landmarkup:land", 0); > tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("panel:form:landmarkup:land").getBehaviors().get(0)); > tester.assertVisible("panel:form:ortemarkup:orte"); > tester.assertInvisible("panel:form:strassenmarkup:strassen"); > formTester.select("ortemarkup:orte", 0); > tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("panel:form:ortemarkup:orte").getBehaviors().get(0)); > tester.assertVisible("panel:form:strassenmarkup:strassen"); > tester.assertInvisible("panel:form:objektemarkup:objekte"); > formTester.select("strassenmarkup:strassen", 0); > tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("panel:form:strassenmarkup:strassen").getBehaviors().get(0)); > tester.assertVisible("panel:form:objektemarkup:objekte"); > formTester.submit("nextButton"); > tester.assertRenderedPage(IndexBootstrap.class); formTester = > tester.newFormTester("panel:form"); > Assert.assertEquals("",formTester.getForm().getClass().getSimpleName(),"ObjektInput"); > and found out that if i use > tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("panel:form:strassenmarkup:strassen").getBehaviors().get(0)); > selectedStrasse is null so that the nextButton behaviour is not the same as > in real life. > If i avoid the above i must also avoid > tester.assertVisible("panel:form:objektemarkup:objekte");but the nextButton > behaviour is then the same as in real life.This different behaviour is with > all fields.When i select a dropdown and then immediately hit nextButton > there is no difference in behaviout.so the difference in the behaviour of > the IModel selectedFields comes by tester.executeBehavior where all set > IModel fields are set at null
myproject.tar.gz
Description: application/gz
--------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org