Re: How to dynamically display a Form depending on a DropDownChoice?

2009-11-11 Thread Ernesto Reinaldo Barreiro
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?

2009-11-11 Thread srm

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?

2009-11-11 Thread 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?

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?

2009-11-11 Thread 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 

Re: How to dynamically display a Form depending on a DropDownChoice?

2009-11-11 Thread srm
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?

2009-11-11 Thread 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:

 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?

2009-11-11 Thread srm
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?

2009-11-11 Thread 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

 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?

2009-11-11 Thread srm
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