Hello, I'm asking for help...
I'm a newbie in wicket and I need to solve quite quick following
problem:

   there are 2 AutoCompleteTextField fields in the form on the page A,
   when value in the first field selected the second one is filled
automatically and vice versa.
   These fields are filling two fields of one Object.

   there is a possibility to go to the other page and then return back
after creating some staff on the page B.

    The problem is in usage of back button to return from page B to
page A without creation any staff.
    The field that was set during ajax event handling becomes empty.

Huge thanks in advance!

The code I'm using is following:

    public class MyPage extends WebPage {

   private MyObj myO = new MyObj();

   public MyPage() {
       Form myForm = new MyForm("myForm");

       FeedbackPanel message = new FeedbackPanel("message");
       message.setOutputMarkupId(true);
       add(message);
       add(myForm);
   }

   private class MyForm extends Form {

       private HashMap<String, NameDTO> autoComplete;
       NameDTO myNameDTO;

       private AutoCompleteTextField number;
       private AutoCompleteTextField name;

       public MyForm(String id) {
           super(id);

           number = this.initNummer();
           name = this.initName();

           //AutoComplete fields
           add(number);
           add(name);
          ...
       } //EO Form constructor


       private AutoCompleteTextField initNummer() {
           AutoCompleteTextField nummer;

           IAutoCompleteRenderer numRenderer
           = new AbstractAutoCompleteTextRenderer() {

              @Override
               protected String getTextValue(Object obj) {

                   if (obj != null) {
                       NameDTO obj2 = (NameDTO) obj;
                       autoComplete.put(obj2.getNummer(), obj2);
                       return obj2.getNummer();
                   }
                   return "";
               }
           };

           // initialize number
           nummer = new AutoCompleteTextField("number",
               new PropertyModel(myO, "nummer"), numRenderer) {



               @Override
              protected Iterator getChoices(String prefix) {
                   autoComplete = new HashMap<String, NameDTO>();
                   List objs = CompleteUtils.readByNummer(prefix);

                   return objs.iterator();
               }
           };

           nummer.add(new AjaxFormComponentUpdatingBehavior("onchange")
{

               @Override
               protected void onUpdate(AjaxRequestTarget target) {
                   myNameDTO = autoComplete.get(myO.getNummer());
                   name.modelChanging();
                   myO.setName((myNameDTO == null) ? "" :
myNameDTO.getName());
                   name.setModelObject(myO.getName());
                   name.modelChanged();

                   target.addComponent(name);
               }

              });
           nummer.setOutputMarkupId(true);

           return nummer;
       }

       private AutoCompleteTextField initName() {
           AutoCompleteTextField name;

           IAutoCompleteRenderer myNameRenderer
           = new AbstractAutoCompleteTextRenderer() {

               @Override
               protected String getTextValue(Object obj) {
                   if (obj != null) {
                       NameDTO obj2 = (NameDTO) obj;
                       autoComplete.put(obj2.getName(), obj2);
                       return obj2.getName();
                   }
                   return "";
               }
           };

           //initialize name
           name = new AutoCompleteTextField("name",
               new PropertyModel(myO, "name"), myNameRenderer) {

               @Override
               protected Iterator getChoices(String prefix) {
                   autoComplete = new HashMap<String, NameDTO>();
                   List objs = AutoCompleteUtils.readByName(prefix);
                   return objs.iterator();
               }

           };


           name.add(new AjaxFormComponentUpdatingBehavior("onchange") {

               @Override
               protected void onUpdate(AjaxRequestTarget target) {
                   myNameDTO = autoComplete.get(myO.getName());
                   number.modelChanging();
                   myO.setNummer((myNameDTO == null) ? "" :
myNameDTO.getNummer());
                   number.setModelObject(myO.getNummer());
                   number.modelChanged();

                   target.addComponent(number);
               }

               });

           name.setOutputMarkupId(true);
           return name;
       }
 ....
   } //EO Form

}

--
Katherine.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to