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

Attachment: 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

Reply via email to