Hello,

here is an abstract code example of my problem with my application.

####################
# StartPage
####################
class StartPage extends WebPage {
  public StartPage(PageParameters parameters) {
    add(new SearchForm("searchForm", parameters));
  }

  private class SearchForm extends StatelessForm {
    public SearchForm(String id, final PageParameters params) {
      super(id);
      init();
    }

    private void init() {
      Button startButton = new Button("button_search") {
        @Override
        public void onSubmit() {
          PageParamerters p = new PageParameters();
          // some additional checks with the parameters
          ....
          setResponsePage(MyFormPage.class, p);
        }
      }
    }
  }
}

#################
# MyFormPage
#################
class MyFormPage extends WebPage {
  public MyFormPage(PageParameters parameters) {
    super(parameters);
    Model<MySearchModel> model = new Model<MySearchModel>() {
      MySearchModel msm = new MySearchModel();

      @Override
      public MySearchModel getObject() {
        return msm;
      }
  
      @Override
      public void setObject(MySearchModel newModel) {
        this.msm = newModel;
      }
    }

    CompundPropertyModel<MySearchModel> cpm = new 
CompoundPropertyModel<MySearchModel>(model);
    add(new AdvancedSearchForm("asForm", cpm));
  }

  private class AdvancedSearchForm extends StatelessForm<MySearchModel> {
    private String name = null;

    public AdvancedSearchForm (String id, IModel<MySearchModel> model) {
      super(id, model);
      init(model);
    }

    private void init(IModel<MySearchModel> model) {
      IModel<List<String>> classes = new 
LoadableDetachableModel<List<String>>() {
        @Override
        public List<String> load() {
          List<String> classes = HelperClass.getClasses();
          Collections.sort(classes);
          return classes;
        }
      }

      IChoiceRenderer<Object> rendererClasses = new IChoiceRenderer<Object>() {
        public Object getDisplayValue(Object obj) {
          return obj;
        }

        public String getIdValue(Object obj, int index) {
          return obj.toString();
        }
      };
      CheckBoxMultipleChoice<String> classesChoice =
                    new CheckBoxMultipleChoice<String>("classes",
                            classes,
                            rendererClasses);
      add(classesChoice);

      TextField<String> tf = new TextField<String>("name", new 
PropertyModel<String>(this, "name"));
      add(tf);

      add(new Button("searchbutton_search") {
        @Override
        public void onSubmit() {
          makeSubmit();
        }
      });
    }

    /**
     * Do the submit and got to the response page
     */
    private void makeSubmit() {
      MySession s = (MySession)getSession();
      MySearchModel modelObject = this.getModelObject();

      if (!s.mySearchModelExists(modelObject.hashCode())) {
        s.setMySearchModel(modelObject);
      }

      PageParameters p = new PageParameters();
      // following method creates parameters from the model
      p = MyParameterHelper.preparePageParameters(p, modelObject);
      setResponsePage(MyFinalPage.class, p);
    }
  }
}

####################
# MySearchModel
####################

public class SearchModel implements Serializable {
  private String name = null;
  private List<String> classes = null;

  public void setName(String newName) {
    name = newName;
  }

  public void setClasses(List<String> newClasses) {
    classes = newClasses;
  }

  public String getName() {
    return name;
  }

  public List<String> getClasses() {
    return classes;
  }
}

The process:

(0) I open the Opera Browser.
(1) I click on the button of the StatelessForm (SearchForm) in the StartPage 
class.
(2) The MyFormPage site is displayed.
(3) I select some classes and click the button in the AdvancedSearchForm.
(4) The MyFinalPage site is displayed.
(5) I open the Firefox Browser.
(6) I see the StartPage and click the button in the SearchForm.
(7) The MyFormPage is displayed and the classes from step (3) are selected.
(8) Additionally, I added a System.out.println(model.toString) before the line:
CompundPropertyModel<MySearchModel> cpm = new 
CompoundPropertyModel<MySearchModel>(model);
and looked into the Catalino.out logs. You can see that this is directly after 
the
initilization of the: Model<MySearchModel> model = new Model<MySearchModel>()
-> the logs tell me that the classes from step (3) are in the model
=> You can see in the model above that the classes are initialized with null.

Puh.
This is my problem. I hope that this code example gives a good imagination
of my problem.
I do not know why the classes from step 3 are in the model after a new 
initialization.

I would be very thankful for a solution.

Thanks,
Andre





On Tue, 3 Jul 2012 20:16:13 +0200
Andre Schütz <wic...@faustas.de> wrote:

> There is one important information that I had forgotten to
> mention. The link on my start page is not a link. It is a button
> from within a form.
> 
> Andre
> 
> On Tue,  3 Jul 2012 11:41:36 +0200 (CEST)
> wic...@faustas.de wrote:
> 
> > Hello,
> > 
> > thanks for the answers. At the moment I am not able to access my code but 
> > let
> > me explain the code in detail and give you some additional examples. I think
> > the idea with the stateful behavior could be right but I do not understand 
> > the 
> > reason.
> > 
> > In detail.
> > 
> > - I have a starting page where a Link is constructed that depending on the 
> > available
> > PageParameters links to the second page with or without PageParameters:
> > 
> > p.. PageParameters
> > 
> > setResponsePage(MyPage2.class, p) or setResponsePage(MyPage2.class) or 
> > 
> > - After clicking the link on the starting page, the MyPage2 will be opened 
> > and 
> > the constructor adds the elements to the page. A Form will be added and 
> > gets 
> > a Model that is created in the constructor:
> > 
> > MyModel model = new MyModel();
> > 
> > The MyModel has two fields. 
> > class MyModel {
> >   private String text;
> >   private List<String> classes;
> >   public void setText ..
> >   public void setClasses...
> >   public String getText ...
> >   public List<String> getClasses...
> > }
> > 
> > The "classes" field is pre-filled with 3 entries in the MyModel class.
> > 
> > Before the end of the constructor, my Form is added with:
> > add(new MyForm("id", new CompoundPropertyModel(model)));
> > 
> > When I submit the form, the MyPage3 is opened and the values from
> > the MyForm are used.
> > 
> > When I click back to my starting page and click on the link to MyPage2,
> > the selected values from the first click to this page are filled in the
> > MyModel. I printed the values of MyModel directly after the line:
> > MyModel model = new MyModel()
> > Normally, the pre-filled values should be in the classes variable. BUT ... 
> > I have the selected values from the first call of the MyPage2.
> > That's my miracle :)
> > 
> > Thanks for any additional help
> > Andre
> > 
> > ----- Original Message -----
> > From: mgrigo...@apache.org
> > To: users@wicket.apache.org
> > Date: 03.07.2012 07:44:54
> > Subject: Re: Model is not created
> > 
> > 
> > > On Mon, Jul 2, 2012 at 11:45 PM, Andre Schütz <wic...@faustas.de> wrote:
> > >> Hello,
> > >> 
> > >> I have a problem with the creation of a model in one of my pages.
> > >> It works as follows:
> > >> 
> > >> I have a link that uses setResponsePage(new MyPage(parameters)) on the 
> > >> click
> > > 
> > > I'd recommend to use setResponsePage(MyPage.class, parameters) instead
> > > in this case. This way you will have a nice looking url and the page
> > > may stay stateless if there are no stateful components/behaviors in
> > > it.
> > > If you know the parameters earlier then you can even use
> > > BookmarkablePageLink("id", MyPage.class, parameters) - this will save
> > > you a http redirect.
> > > 
> > >> with parameters as PageParameters.
> > >> At the MyPage site, the constructor creates a:
> > >> IModel<MyModel> model = new IModel<MyModel>() {
> > >>   public void setObject ..
> > >>   public MyModel getObject..
> > >> }
> > >> 
> > >> This variable is used to create a CompoundPropertyModel for a Form.
> > >> 
> > >> The first time when I click on my link to the MyPage site, everything
> > >> is fine. At the second time, the MyModel variable is not empty. The
> > >> variable is filled with the selected values from the first time when
> > >> I clicked on the link to the MyPage site.
> > >> 
> > >> I do not understand this behavior. Normally, the MyModel variable
> > >> should be empty and not filled with the last selection.
> > >> 
> > >> Has someone an idea?
> > >> 
> > >> Thanks,
> > >> Andre
> > >> 
> > >> --
> > >> Andre Schütz <wic...@faustas.de>
> > >> 
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > >> For additional commands, e-mail: users-h...@wicket.apache.org
> > >> 
> > > 
> > > 
> > > 
> > > -- 
> > > Martin Grigorov
> > > jWeekend
> > > Training, Consulting, Development
> > > http://jWeekend.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
> 
> 
> -- 
> Andre Schütz <wic...@faustas.de>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org


-- 
Andre Schütz <wic...@faustas.de>

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

Reply via email to