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