You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Matt Stevenson <ma...@bright-interactive.co.uk> on 2012/04/02 17:00:36 UTC

RadioGroup selections after validation failure problem

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);
    }
}

Re: RadioGroup selections after validation failure problem

Posted by Matt Stevenson <ma...@bright-interactive.co.uk>.
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: users@wicket.apache.org
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: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org 


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


Re: RadioGroup selections after validation failure problem

Posted by Andrea Del Bene <an...@gmail.com>.
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: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org