Re: RadioChoice and ListView
Thank you Carlos, that fixed the problem! However, I still don't quite understand why. I guess I don't understand PropertyModel as well as I thought I did. What does PropertyModel do that allows the ParticipationList to be referenced across the two requests? Thanks again! -Alex Pine On 8/30/07, Carlos Pita [EMAIL PROTECTED] wrote: This looks wrong too: ListParticipation participationList = exModel.getEx ().getParticipationList(); ListView subjectListView = new ListView(list, participationList) { if your experiment model is intended to be a detachable one, ie. if you are loading it from a database or something, then you shouldn't instantiate the listview with a list but with a model that loads that list (or delegates to another model that eventually loads the entity to which the collection belongs...). If you pass the plain collection you are defeating the entire purpose of having the loadabledetachablemodel in the first place. For example, use new ListView(list, new PropertyModel(exModel, participationList)); Regards, Carlos On 8/29/07, Igor Vaynberg [EMAIL PROTECTED] wrote: break in your onsubmit and look at the list that the listview is pointing to. make sure the data is there, the fact that it isnt being persisted might be a problem outside of wicket's scope. -igor On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: I'm sorry to spam the list like this, but I really need help on this. Igor's solution doesn't seem to change anything. No information is transferred to the database upon hitting on submit. If no one knows the solution, does anyone have any ideas on how I could debug this? Is there some way I can reference the selections of the radiogroups from the the onSubmit method so I can see what their values are? Thanks for any help you can give, Alex On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: Thank you for the quick reply, but this fix doesn't seem to work. The selections are never persisted on form submit. Any ideas? On 8/29/07, Igor Vaynberg [EMAIL PROTECTED] wrote: problem is here RadioGroup rg = new RadioGroup(choice); you are not setting the model for the radiogroup choice so your choices go no where RadioGroup rg = new RadioGroup(choice, new PropertyModel( item.getModel(), status)); or leave it as it is and use PropertyListView instead -igor On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: Hi all, I'm trying to use a Radio Choice component inside a Listview so that each list item has one RadioGroup with three choices. When the form submit button is pressed, each selected choice should set a field in the model object of each list item. The code below should explain the problem more fully: /* The ultimate goal is to set the status field in each Participation object in the participationList of the object below. */ public class Experiment { private String name; private ListParticipation participationList; /* Other fields, constructors, getters, setters, etc */ } public class Participation { public static final int PARTICIPATED = 1; public static final int NO_SHOW = -1; public static final int SHOWED = 0; private User user; private int status; public Participation() { status = SHOWED; // Default value } /* getters, setters, etc */ } /* This is the web page that is supposed to do the setting*/ public class ParticipationPage extends BasePage { private static final long serialVersionUID = 1L; @SpringBean private ExperimentDAO exDAO; private DetachableExperimentModel exModel; public ParticipationPage(Experiment ex) { exModel = new DetachableExperimentModel(ex, exDAO); add(new ParticipationForm(form)); exModel.detach(); } class ParticipationForm extends Form { public ParticipationForm(String id) { super(id); ListParticipation participationList = exModel.getEx ().getParticipationList(); ListView subjectListView = new ListView(list, participationList) { private static final long serialVersionUID = 1L; /* I imagine the correct code should be something like this...? */ public void populateItem(final ListItem item) { Participation participation =
Re: RadioChoice and ListView
problem is here RadioGroup rg = new RadioGroup(choice); you are not setting the model for the radiogroup choice so your choices go no where RadioGroup rg = new RadioGroup(choice, new PropertyModel(item.getModel(), status)); or leave it as it is and use PropertyListView instead -igor On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: Hi all, I'm trying to use a Radio Choice component inside a Listview so that each list item has one RadioGroup with three choices. When the form submit button is pressed, each selected choice should set a field in the model object of each list item. The code below should explain the problem more fully: /* The ultimate goal is to set the status field in each Participation object in the participationList of the object below. */ public class Experiment { private String name; private ListParticipation participationList; /* Other fields, constructors, getters, setters, etc */ } public class Participation { public static final int PARTICIPATED = 1; public static final int NO_SHOW = -1; public static final int SHOWED = 0; private User user; private int status; public Participation() { status = SHOWED; // Default value } /* getters, setters, etc */ } /* This is the web page that is supposed to do the setting*/ public class ParticipationPage extends BasePage { private static final long serialVersionUID = 1L; @SpringBean private ExperimentDAO exDAO; private DetachableExperimentModel exModel; public ParticipationPage(Experiment ex) { exModel = new DetachableExperimentModel(ex, exDAO); add(new ParticipationForm(form)); exModel.detach(); } class ParticipationForm extends Form { public ParticipationForm(String id) { super(id); ListParticipation participationList = exModel.getEx ().getParticipationList(); ListView subjectListView = new ListView(list, participationList) { private static final long serialVersionUID = 1L; /* I imagine the correct code should be something like this...? */ public void populateItem(final ListItem item) { Participation participation = (Participation)item.getModelObject(); item.add(new Label(name, participation.getUser ().getName())); RadioGroup rg = new RadioGroup(choice); rg.add(new Radio(participated, new Model( Participation.PARTICIPATED))); rg.add(new Radio(no show, new Model( Participation.NO_SHOW))); rg.add(new Radio(showed, new Model( Participation.SHOWED))); item.add(rg); } }; subjectListView.setReuseItems(true); add(subjectListView); } @Override protected void onSubmit() { /* * Somehow I have to set each Participation object in the user's participationList * to the choice from corresponding the radio group. */ exDAO.persistExperiment(exModel.getEx()); exModel.detach(); } } } Does anyone know how to do this easily? I imagine it's not difficult, I just can't figure it out from the examples on the web. Thanks! -Alex Pine
Re: RadioChoice and ListView
I'm sorry to spam the list like this, but I really need help on this. Igor's solution doesn't seem to change anything. No information is transferred to the database upon hitting on submit. If no one knows the solution, does anyone have any ideas on how I could debug this? Is there some way I can reference the selections of the radiogroups from the the onSubmit method so I can see what their values are? Thanks for any help you can give, Alex On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: Thank you for the quick reply, but this fix doesn't seem to work. The selections are never persisted on form submit. Any ideas? On 8/29/07, Igor Vaynberg [EMAIL PROTECTED] wrote: problem is here RadioGroup rg = new RadioGroup(choice); you are not setting the model for the radiogroup choice so your choices go no where RadioGroup rg = new RadioGroup(choice, new PropertyModel( item.getModel(), status)); or leave it as it is and use PropertyListView instead -igor On 8/29/07, Alex Pine [EMAIL PROTECTED] wrote: Hi all, I'm trying to use a Radio Choice component inside a Listview so that each list item has one RadioGroup with three choices. When the form submit button is pressed, each selected choice should set a field in the model object of each list item. The code below should explain the problem more fully: /* The ultimate goal is to set the status field in each Participation object in the participationList of the object below. */ public class Experiment { private String name; private ListParticipation participationList; /* Other fields, constructors, getters, setters, etc */ } public class Participation { public static final int PARTICIPATED = 1; public static final int NO_SHOW = -1; public static final int SHOWED = 0; private User user; private int status; public Participation() { status = SHOWED; // Default value } /* getters, setters, etc */ } /* This is the web page that is supposed to do the setting*/ public class ParticipationPage extends BasePage { private static final long serialVersionUID = 1L; @SpringBean private ExperimentDAO exDAO; private DetachableExperimentModel exModel; public ParticipationPage(Experiment ex) { exModel = new DetachableExperimentModel(ex, exDAO); add(new ParticipationForm(form)); exModel.detach(); } class ParticipationForm extends Form { public ParticipationForm(String id) { super(id); ListParticipation participationList = exModel.getEx ().getParticipationList(); ListView subjectListView = new ListView(list, participationList) { private static final long serialVersionUID = 1L; /* I imagine the correct code should be something like this...? */ public void populateItem(final ListItem item) { Participation participation = (Participation)item.getModelObject(); item.add(new Label(name, participation.getUser ().getName())); RadioGroup rg = new RadioGroup(choice); rg.add (new Radio(participated, new Model( Participation.PARTICIPATED))); rg.add(new Radio(no show, new Model( Participation.NO_SHOW))); rg.add(new Radio(showed, new Model( Participation.SHOWED))); item.add(rg); } }; subjectListView.setReuseItems (true); add(subjectListView); } @Override protected void onSubmit() { /* * Somehow I have to set each Participation object in the user's participationList * to the choice from corresponding the radio group. */ exDAO.persistExperiment(exModel.getEx()); exModel.detach(); } } } Does anyone know how to do this easily? I imagine it's not difficult, I just can't figure it out from the examples on the web. Thanks! -Alex Pine