Hi Andrea,
That solved the problem - I should have noticed it was missing the model
myself!
Thanks so much for the help.
Matt
-----Original Message-----
From: Andrea Del Bene
Sent: Monday, April 02, 2012 6:36 PM
To: [email protected]
Subject: Re: RadioGroup selections after validation failure problem
HI,
try giving a model to your RadioGroup:
final RadioGroup<Presentation> group = new
RadioGroup<Presentation>("presentationSingleSelectGroup", new
Model<Presentation>());
Hi All,
My company has just started evaluating Wicket on an app that allows users
to select and merge multiple PowerPoint presentations.
We’ve hit a bit of a problem though, basically at the moment we have one
long form containing a number of section panels.
The section panels are either ‘multi select’ (a Panel containing a
CheckGroup that contains Check objects representing the PowerPoint
presentations in that section) or ‘single select’ (a Panel containing a
RadioGroup that contains Radio objects).
The problem happens when a validation failure occurs. Basically the
checkboxes that the user selected prior to the validation failure are
remembered and repopulated when the user is bounced back to the page but
the radio buttons that the user selected aren’t remembered.
Any help would be gratefully received, I’ve snipped out what I think are
the relevant bits of code below...
Thanks
Matt
FORM CODE:
______________
public class PresentationSelectionForm extends
Form<PresentationSelectionFormModel> implements Serializable
{
private static final long serialVersionUID = 5962930827736414107L;
final DownloadLinkPanel dlPanel =
DownloadLinkPanel.getEmptyLink("downloadLinkPanel");
final HiddenField<String> messageIndicator = new
HiddenField<String>("messageIndicator", new Model<String>("0"));
private List<PresentationSelector> selectors = new
ArrayList<PresentationSelector>();
@SpringBean
private AssetBankService assetBankService;
public PresentationSelectionForm(String name, List<Section>
sections, final PageParameters parameters)
{
super(name, new
CompoundPropertyModel<PresentationSelectionFormModel>(new
PresentationSelectionFormModel()));
add(new FeedbackPanel("feedback"));
add(dlPanel);
add(messageIndicator);
HiddenField<String> mandatorySections = new
HiddenField<String>("requiredSections", new
Model<String>(getIdListFromMandatorySections(sections)));
add(mandatorySections);
ListView<Section> sectionList = new
ListView<Section>("sections", sections)
{
private static final long serialVersionUID =
7480938703389583883L;
protected void populateItem(ListItem<Section> sectionItem)
{
sectionItem.add(new Label("sectionTitle",
sectionItem.getModelObject().getTitle()));
PresentationMultiSelectPanel multi = new
PresentationMultiSelectPanel("presentationMultiSelectPanel", sectionItem);
PresentationSingleSelectPanel single = new
PresentationSingleSelectPanel("presentationSingleSelectPanel",
sectionItem);
selectors.add(multi);
selectors.add(single);
sectionItem.add(multi);
sectionItem.add(single);
}
};
sectionList.setReuseItems(true);
add(sectionList);
}
@Override
public void onSubmit()
{
//create the list of asset bank ids to merge from the panel
input...
List<Long> assetBankAssetIds = new ArrayList<Long>();
for (PresentationSelector selector : selectors)
{
assetBankAssetIds.addAll(selector.getSelectedAssetBankAssetIds());
}
if (assetBankAssetIds.size() == 0)
{
error("Unable to complete merge, no presentations were
selected. Please select from the list then try again");
}
else if (!allMandatorySectionsAreCompleted())
{
error("Unable to complete merge, not all mandatory sections
were completed. Please complete all mandatory sections and try again");
}
else
{
try
{
File mergedPresentations =
assetBankService.getMergedPresentations(assetBankAssetIds);
addOrReplace(DownloadLinkPanel.getLinkToResourceFile("downloadLinkPanel",
mergedPresentations, "Download your file:
"+mergedPresentations.getName()));
}
catch (IOException e)
{
throw new RuntimeException("Error merging presentations",
e);
}
}
addOrReplace(new HiddenField<String>("messageIndicator", new
Model<String>("1")));
}
}
SINGLE SELECT PANEL CODE:
________________________
public class PresentationSingleSelectPanel extends Panel implements
PresentationSelector, Serializable
{
private static final long serialVersionUID = 7062146893868378278L;
private Section section;
final RadioGroup<Presentation> group = new
RadioGroup<Presentation>("presentationSingleSelectGroup");
public PresentationSingleSelectPanel(String id, ListItem<Section>
sectionItem)
{
super(id);
section = sectionItem.getModelObject();
ListView<Presentation> presentations = new
ListView<Presentation>("presentations",
sectionItem.getModelObject().getPresentations())
{
private static final long serialVersionUID
= -2741478778745270525L;
protected void populateItem(ListItem<Presentation>
presentationItem)
{
presentationItem.add(new
Radio<Presentation>("presentation", presentationItem.getModel()));
presentationItem.add(new Label("presentationLabel",
presentationItem.getModelObject().getName()));
presentationItem.add(new
PresentationThumbnailsPanel("presentationThumbnailPanel",
presentationItem));
}
};
presentations.setReuseItems(true);
group.add(presentations);
add(group);
}
}
MULTI SELECT PANEL CODE:
________________________
public class PresentationMultiSelectPanel extends Panel implements
PresentationSelector, Serializable
{
private static final long serialVersionUID = 1024114105801324440L;
private Section section;
final CheckGroup<Presentation> multiGroup = new
CheckGroup<Presentation>("presentationMultiSelectGroup", new
ArrayList<Presentation>());
public PresentationMultiSelectPanel(String id, ListItem<Section>
sectionItem)
{
super(id);
section = sectionItem.getModelObject();
ListView<Presentation> presentations = new
ListView<Presentation>("presentations",
sectionItem.getModelObject().getPresentations())
{
private static final long serialVersionUID =
1397844164166900201L;
protected void populateItem(ListItem<Presentation>
presentationItem)
{
presentationItem.add(new
Check<Presentation>("presentation", presentationItem.getModel()));
presentationItem.add(new Label("presentationLabel",
presentationItem.getModelObject().getName()));
presentationItem.add(new
PresentationThumbnailsPanel("presentationThumbnailPanel",
presentationItem));
}
};
presentations.setReuseItems(true);
multiGroup.add(presentations);
add(multiGroup);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]