Re: How to dynamically display a Form depending on a DropDownChoice?
I have used something similar to import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import com.google.inject.Inject; public class EditPanel extends Panel { private IArticleEditFactory factory; private IArticle selected; private FormIArticle form; /** * @param id */ public EditPanel(String id) { super(id); setOutputMarkupId(true); form = new FormIArticle(form); DropDownChoiceIArticle choice = new DropDownChoiceIArticle(article, new ModelIArticle() { public IArticle getObject() { return EditPanel.this.selected; }; public void setObject(IArticle object) { EditPanel.this.selected = object; }; }, listWithArticles ); choice.add(new OnChangeAjaxBehavior() { @Override protected void onUpdate(AjaxRequestTarget target) { if(target != null) { target.addComponent(EditPanel.this); } } }); form.add(choice); } @Override protected void onBeforeRender() { if(selected != null) { form.addOrReplace(factory.createArticleEditPanel(content, selected)); } else { form.addOrReplace(new EmptyPanel(content)); } super.onBeforeRender(); } } for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote: How would you approach the following: PageA is used to insert an article. At first, the user chooses what kind of article to insert (DropDownChoice). When the User made his choice, a coresponding form should be loaded/visible underneath the DropDownChoice. That's all to be solved without JavaScript. My current idea is currently to add an Panel (AddArticlePanel) which holds all fields for any kind of article and make them visible depending on what the user has chosen (using onSelectionChanged). But that seems like a brute approach so I wanted to get your opinions on this. Further information will be happily provided. Regards, Stephan - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: How to dynamically display a Form depending on a DropDownChoice?
Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto Thank you for this example. But I'm bound to not use Ajax/JavaScript...and now I'm stuck. Regards, Stephan On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote: How would you approach the following: PageA is used to insert an article. At first, the user chooses what kind of article to insert (DropDownChoice). When the User made his choice, a coresponding form should be loaded/visible underneath the DropDownChoice. That's all to be solved without JavaScript. My current idea is currently to add an Panel (AddArticlePanel) which holds all fields for any kind of article and make them visible depending on what the user has chosen (using onSelectionChanged). But that seems like a brute approach so I wanted to get your opinions on this. Further information will be happily provided. Regards, Stephan - 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
Re: How to dynamically display a Form depending on a DropDownChoice?
If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto Thank you for this example. But I'm bound to not use Ajax/JavaScript...and now I'm stuck. Regards, Stephan On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote: How would you approach the following: PageA is used to insert an article. At first, the user chooses what kind of article to insert (DropDownChoice). When the User made his choice, a coresponding form should be loaded/visible underneath the DropDownChoice. That's all to be solved without JavaScript. My current idea is currently to add an Panel (AddArticlePanel) which holds all fields for any kind of article and make them visible depending on what the user has chosen (using onSelectionChanged). But that seems like a brute approach so I wanted to get your opinions on this. Further information will be happily provided. Regards, Stephan - 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
Re: How to dynamically display a Form depending on a DropDownChoice?
Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; @SuppressWarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } @Override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { @Override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be
Re: How to dynamically display a Form depending on a DropDownChoice?
SOLVED! w/o JS/AJAX I created a factory to produce the corresponding Panel(including the form) and I use a call to replaceWith() in onSelectionChanged(): [code] @Override protected void onSelectionChanged(final Object newSelection) { Panel newPanel = AddItemPanel.getAddItemPanel(selected, addArticlePanel); //the factory call addArticlePanel.replaceWith(newPanel); addArticlePanel = newPanel; } Thanks to martin-g @ #wicket. Regards, Stephan Am 11.11.2009 um 16:18 schrieb srm: Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; @SuppressWarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } @Override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { @Override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto Thank you for this example. But I'm bound to not use Ajax/JavaScript...and now I'm stuck. Regards, Stephan On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote: How would you approach the following: PageA is used to insert an article. At first, the user chooses what kind of article to insert (DropDownChoice). When the User made his choice, a coresponding form should be loaded/visible underneath the DropDownChoice. That's all to be solved without JavaScript. My current idea is currently to add an Panel (AddArticlePanel) which holds all fields for any kind of article
Re: How to dynamically display a Form depending on a DropDownChoice?
How do you think wantOnSelectionChangedNotification() works? With or without JS? Martijn On Wed, Nov 11, 2009 at 9:39 PM, srm s...@schokokeks.org wrote: SOLVED! w/o JS/AJAX I created a factory to produce the corresponding Panel(including the form) and I use a call to replaceWith() in onSelectionChanged(): [code] �...@override protected void onSelectionChanged(final Object newSelection) { Panel newPanel = AddItemPanel.getAddItemPanel(selected, addArticlePanel); //the factory call addArticlePanel.replaceWith(newPanel); addArticlePanel = newPanel; } Thanks to martin-g @ #wicket. Regards, Stephan Am 11.11.2009 um 16:18 schrieb srm: Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; �...@suppresswarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } �...@override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { �...@override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto Thank you for this example. But I'm bound to not use Ajax/JavaScript...and now I'm stuck. Regards, Stephan On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote: How would you approach the following: PageA is used to insert an article. At first, the user chooses what kind of article to insert (DropDownChoice). When the User made his choice, a coresponding form should be loaded/visible underneath the DropDownChoice. That's all to be solved without JavaScript. My
Re: How to dynamically display a Form depending on a DropDownChoice?
Ah! Stupid me! I've read that it is working with JS and I didn't make sure to disable JS for my local host. Argh. So it's not solved. Need to find a way around then. Thanks for the pointer. Regards, Stephan Am 11.11.2009 um 21:44 schrieb Martijn Dashorst: How do you think wantOnSelectionChangedNotification() works? With or without JS? Martijn On Wed, Nov 11, 2009 at 9:39 PM, srm s...@schokokeks.org wrote: SOLVED! w/o JS/AJAX I created a factory to produce the corresponding Panel(including the form) and I use a call to replaceWith() in onSelectionChanged(): [code] @Override protected void onSelectionChanged(final Object newSelection) { Panel newPanel = AddItemPanel.getAddItemPanel(selected, addArticlePanel); //the factory call addArticlePanel.replaceWith(newPanel); addArticlePanel = newPanel; } Thanks to martin-g @ #wicket. Regards, Stephan Am 11.11.2009 um 16:18 schrieb srm: Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; @SuppressWarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } @Override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { @Override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such situations... I delegate creation to a factory class (so that new products can be plugged in). Best, Ernesto Thank you for this example. But I'm bound to not use Ajax/JavaScript...and now I'm stuck. Regards, Stephan On Wed, Nov 11, 2009 at 2:53 PM, srm s...@schokokeks.org wrote:
Re: How to dynamically display a Form depending on a DropDownChoice?
you should do something like this [form1][select/][submit button/][/form1] [form2][form components panel/][/form2] user presses the submit button in form 1, in form 1's onsubmit you swap the form components panel based on the selection. simple. -igor On Wed, Nov 11, 2009 at 12:50 PM, srm s...@schokokeks.org wrote: Ah! Stupid me! I've read that it is working with JS and I didn't make sure to disable JS for my local host. Argh. So it's not solved. Need to find a way around then. Thanks for the pointer. Regards, Stephan Am 11.11.2009 um 21:44 schrieb Martijn Dashorst: How do you think wantOnSelectionChangedNotification() works? With or without JS? Martijn On Wed, Nov 11, 2009 at 9:39 PM, srm s...@schokokeks.org wrote: SOLVED! w/o JS/AJAX I created a factory to produce the corresponding Panel(including the form) and I use a call to replaceWith() in onSelectionChanged(): [code] �...@override protected void onSelectionChanged(final Object newSelection) { Panel newPanel = AddItemPanel.getAddItemPanel(selected, addArticlePanel); //the factory call addArticlePanel.replaceWith(newPanel); addArticlePanel = newPanel; } Thanks to martin-g @ #wicket. Regards, Stephan Am 11.11.2009 um 16:18 schrieb srm: Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; �...@suppresswarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } �...@override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { �...@override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto On Wed, Nov 11, 2009 at 3:45 PM, srm s...@schokokeks.org wrote: Am 11.11.2009 um 15:25 schrieb Ernesto Reinaldo Barreiro: I have used something similar to [snip] [snap] for such
Re: How to dynamically display a Form depending on a DropDownChoice?
Yes. Looks like this is the only non-JS way to go (still searching). Simple but ugly. Regards, Stephan Am 11.11.2009 um 21:53 schrieb Igor Vaynberg: you should do something like this [form1][select/][submit button/][/form1] [form2][form components panel/][/form2] user presses the submit button in form 1, in form 1's onsubmit you swap the form components panel based on the selection. simple. -igor On Wed, Nov 11, 2009 at 12:50 PM, srm s...@schokokeks.org wrote: Ah! Stupid me! I've read that it is working with JS and I didn't make sure to disable JS for my local host. Argh. So it's not solved. Need to find a way around then. Thanks for the pointer. Regards, Stephan Am 11.11.2009 um 21:44 schrieb Martijn Dashorst: How do you think wantOnSelectionChangedNotification() works? With or without JS? Martijn On Wed, Nov 11, 2009 at 9:39 PM, srm s...@schokokeks.org wrote: SOLVED! w/o JS/AJAX I created a factory to produce the corresponding Panel(including the form) and I use a call to replaceWith() in onSelectionChanged(): [code] @Override protected void onSelectionChanged(final Object newSelection) { Panel newPanel = AddItemPanel.getAddItemPanel(selected, addArticlePanel); //the factory call addArticlePanel.replaceWith(newPanel); addArticlePanel = newPanel; } Thanks to martin-g @ #wicket. Regards, Stephan Am 11.11.2009 um 16:18 schrieb srm: Am 11.11.2009 um 15:59 schrieb Ernesto Reinaldo Barreiro: If you reload the page when selecting the element, instead of using AJAX, I guess the same will work because you have a selected article... I think AJAX is just a detail here, maybe you can use protected boolean wantOnSelectionChangedNotifications() { return false; } on DropDownChoice? From my understanding, I need wantOnSelectionChangedNotifications() returning TRUE, otherwise onSelectionChanged() is never triggered. My current approach as follows. That's working but it doesn't feel right. To clumsy. Any ideas? (and I beg your pardon for mixing german with english in the code ;) ) package view; ..some imports... public class AddArticlePage extends StorePage { private AddArticlePanel addArticlePanel; @SuppressWarnings(unchecked) public AddArticlePage() { addArticlePanel = new AddArticlePanel(addArticlePanel); addArticlePanel.setVisible(false); DropDownChoice dropDownType = new DropDownChoice(dropDownType, new PropertyModel(this, selected), Artikel.TYPELIST) { protected boolean wantOnSelectionChangedNotifications() { return true; } @Override protected void onSelectionChanged(final Object newSelection) { System.out.println(SELECTION CHANGED!); System.out.println(new Selection = + (String) newSelection); addArticlePanel.setVisibleFields((String) newSelection); addArticlePanel.setVisible(true); } }; Form formAdd = new Form(addArticleForm) { @Override protected void onSubmit() { System.out.println(Added Article...); } }; add(dropDownType); add(addArticlePanel); add(formAdd); } } /* THE PANEL CLASS **/ public class AddArticlePanel extends Panel { private TextField artikelNummer; private TextField preis; private TextField erscheinungsJahr; private TextField beschreibung; private TextField titel; //fields for BOOK private TextField isbn; private TextField autor; private TextField verlag; //fields for CD private TextField label; private TextField artist; public AddArticlePanel(String id) { super(id); artikelNummer = new TextField(artikelNummer, new Model()); preis = new TextField(preis, new Model()); erscheinungsJahr = new TextField(erscheinungsJahr, new Model()); beschreibung = new TextField(beschreibung, new Model()); titel = new TextField(titel, new Model()); isbn = new TextField(isbn, new Model()); autor = new TextField(autor, new Model()); verlag = new TextField(verlag, new Model()); label = new TextField(label, new Model()); artist = new TextField(artist, new Model()); add(artikelNummer); add(preis); add(erscheinungsJahr); add(beschreibung); add(titel); add(isbn); add(autor); add(verlag); add(label); add(artist); // THIS WHOLE THING WOULD HAVE TO BE DONE FOR EACH ITEM AGAIN TO // DISPLAY A LABEL IN FRONT OF EACH TEXTFIELD, HOLDING A DESCRIPTION // SOUNDS AWFULL! } //could probably be optimised public void setVisibleFields(String type) { if (type.equals(BOOK)) { isbn.setVisible(true); autor.setVisible(true); verlag.setVisible(true); label.setVisible(false); artist.setVisible(false); } else { isbn.setVisible(false); autor.setVisible(false); verlag.setVisible(false); label.setVisible(true); artist.setVisible(true); } } } Comments please :) Best, Ernesto