Hi,


In the second step of a Wizard, I am loosing selections of a CheckGroup if I
am going back to the first step using the Previous Button and return using
the Next Button. Consider the following code:



public class CheckBug extends WebPage

{

  public CheckBug() {

    final Wizard wizard = new CheckBugWizard("wizard", PageWithParameters.
class);

    add(wizard);

    wizard.add(wizard.getForm());

  }

}



public class CheckBugWizard extends Wizard

{

  private static final long serialVersionUID = 1L;



  private static final String value = "value";



  private final Class exitPage;

  private final Collection selection = new
ArrayList(Arrays.asList(newString[] {
value }));



  public CheckBugWizard(final String id, final Class exitPage) {

    super(id);

    this.exitPage = exitPage;



    final WizardModel model = new WizardModel();

    model.add(new Step1("step1", "summary1"));

    model.add(new Step2("step2", "summary2", this.selection, value));

    init(model);

  }



  public void onCancel() {

    gotoExitPage();

  }



  public void onFinish() {

    gotoExitPage();

  }



  private void gotoExitPage() {

    final PageParameters p = new PageParameters();



    if (this.selection.contains(value)) {

      p.put("selected", "true");

    }

    else {

      p.put("selected", "false");

    }



    setResponsePage(this.exitPage, p);

  }

}



public class Step1 extends WizardStep

{

  private static final long serialVersionUID = 1L;



  public Step1(final String title, final String summary) {

    super(title, summary);

  }

}



public class Step2 extends WizardStep

{

  private static final long serialVersionUID = 1L;



  public Step2(final String title, final String summary, final Collection
selection, final String value) {

    super(title, summary);



    final CheckGroup group = new CheckGroup("group", selection);

    add(group);



    final RepeatingView repeater = new RepeatingView("repeater");

    group.add(repeater);



    final WebMarkupContainer container =
newWebMarkupContainer(repeater.newChildId());

    repeater.add(container);



    final Check check = new Check("box", new Model(value));

    check.setOutputMarkupId(true);

    container.add(check);



    final Label label = new Label("label", value);

    container.add(label);

  }

}



public class PageWithParameters extends WebPage

{

  public PageWithParameters(final PageParameters parameters) {

    super(parameters);



    final MultiLineLabel label = new MultiLineLabel("label",
newAbstractReadOnlyModel() {

      private static final long serialVersionUID = 1L;



      public Object getObject() {

        PageParameters pageParameters = getPageParameters();



        if (pageParameters == null) {

          *return* "null";

        }



        *return* pageParameters.toString();

      }

    });



    add(label);

  }

}



If I replace



public class Check extends LabeledWebMarkupContainer

{

...

      protected void onComponentTag(final ComponentTag tag)

      {

            if (group.hasRawInput())

            {

                  final String[] input = group.getInputAsArray();



                  if (input != null)

                  {

                        for (int i = 0; i < input.length; i++)

                        {

                             if (uuid.equals(input[i]))

                             {

                                   tag.put("checked", "checked");

                             }

                        }

                  }

            }

...



by



    if (group.hasRawInput()) {

      final String input = group.getRawInput();



      if (input != null) {

        final StringTokenizer st = new StringTokenizer(input, ";");



        while (st.hasMoreElements()) {

          if (value.equals(st.nextToken())) {

            tag.put("checked", "checked");

          }

        }

      }

    }



then the check group selection is kept as intended. Am I right to consider
the selection loss being a bug?



/Till

Reply via email to