Thank you very much Igor for your answer. 
You're right, this is working even without any code in the onSubmit() method 
(in fact I just added one line to manage the visibility of my result 
WebMarkupContainer).
Bernard

-----Message d'origine-----
De : Igor Vaynberg [mailto:igor.vaynb...@gmail.com] 
Envoyé : lundi 9 novembre 2009 17:27
À : users@wicket.apache.org
Objet : Re: best approach for a criteria and result page

On Mon, Nov 9, 2009 at 6:21 AM,  <bernard.lu...@orange-ftgroup.com> wrote:
> Hi all,
>
> I browsed a lot of wicket example and searched through many articles, 
> but never found this classical web application example : I would have 
> on the same page a form with some criteria, a search button and a 
> result list : I enter some data, hit search and get the results under 
> my criteria, just like google does.
>
> No problem for me to define all these parts using wicket components, 
> but I don't know how to manage the workflow, and  especially what code 
> should I put in my form's onSubmit method.

you dont need to put any code in your onsubmit...

class mysearchpage extends webpage {
  private searchcriteria criteria=new searchcriteria();

  public mysearchpage() {
     add(new searchcriteriaform("form", new propertymodel(this, 
"searchcriteria")));
     ^ form object connected to the criteria field of this page via a property 
model

     add(new listview("results", new propertymodel(this,
"searchresults")) {...});
     ^ listview that will display results retrieved from the
getSearchresults() method on this page
   }

   public list getSearchresults() {
       // get whatever results based on the criteria field
   }
}

so in short, form pushes your criteria into the criteria field, listview uses 
the criteria field to build the resultset. yes, its that simple :)

-igor





>
> Here is a sample code :
>
> public class TestPage extends WebPage {
>        public TestPage() {
>                super();
>                createComponents();
>        }
>
>       �...@suppresswarnings("serial")
>        protected void createComponents() {
>                final WebMarkupContainer datacontainer = new 
> WebMarkupContainer("data");
>
>                Form<SearchParameterBean> searchForm = new 
> Form<SearchParameterBean>("searchForm",
>                                new
> CompoundPropertyModel<SearchParameterBean>(new SearchParameterBean())) 
> {
>                       �...@override
>                        protected void onSubmit() {
>                                SearchParameterBean searchParam =
> (SearchParameterBean) getModelObject();
>                                // get contract list in a 
> LoadableDetachableModel, but can't give it to ListView
>                                IModel<List<ResultParameter>> 
> contractListModel = new 
> LoadableDetachableModel<List<ResultParameter>>()
> {
>                                       �...@override
>                                        protected List<ResultParameter>
> load() {
>                                                List<ResultParameter> 
> contractList = manageContract.getContracts();
>                                                return contractList;
>                                        }
>                                };
>                                // This is working, but I must have an 
> inner class and final WebMarkupContainer datacontainer
>                                // What to do if I want to create a 
> class ConsultForm extends Form<SearchParameterBean>
>                                datacontainer.setVisible(true);
>
>                        }
>                };
>                searchForm.add(new TextField<String>("Id"));
>                add(searchForm);
>
>                datacontainer.setVersioned(false);
>                datacontainer.setVisible(false);
>                add(datacontainer);
>
>                // here I do not have access to my contractListModel
>                PageableListView<ResultParameter> listView = new 
> PageableListView<ResultParameter>("contracts", contractListModel, 10){
>                       �...@override
>                        public void
> populateItem(ListItem<ResultParameter> listItem) {
>                                ResultParameter contract = 
> listItem.getModelObject();
>                                Label name = new Label("Name", 
> contract.getName());
>                                listItem.add(name);
>                        }
>                };
>                datacontainer.add(listView);
>        }
>
>
> The questions I have are :
> - How to pass model between the onSubmit() message which defines it, 
> and the FormView which shows itin the page ?
> - Do I have to define a setResponsePage() in my onSubmit() ? If I do 
> so, I must go to another page, and then I lost the user's choosen 
> criteria
> - What is the best practice to build such an application ?
> - Is there somewhere an example with criteria and results on the same 
> page ?
>
> Thank you very much,
> Bernard






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

Reply via email to