Wicket Wizard выдает ложную информацию в методе isComplete();

в дополнение к предыдущему вопросу я пытаюсь реализовать свою собственную мастера калитки с пошаговым обзором. Теперь проблема в том, что isComplete(); похоже возвращает true, даже если шаг еще не завершен. Я сделал 3 шага мастера, а затем запускаю этот код:

public class MainWizard extends Wizard{
    private static final long serialVersionUID = 1L;
    private List<IWizardStep> steps = new ArrayList<IWizardStep>();
    private Component overview = newOverviewBar("overview");
    private IWizardModel wizardModel;

    public MainWizard(String id, IWizardModel wizardModel, boolean addDefaultCssStyle) {
        super(id, wizardModel, addDefaultCssStyle);
        this.wizardModel = wizardModel;
        fillList();
        getIndex();
        this.add(overview);
    }

    public void getIndex(){
        for(IWizardStep step : steps){
            System.out.println(step.getClass());
            if(step.equals(wizardModel.getActiveStep())){
                System.out.println("Active");
            } else if(!step.isComplete()){
                System.out.println("Pending");
            } else if(step.isComplete()){
                System.out.println("Finished");
            }
        }
    }

    public void fillList(){
        Iterator<IWizardStep> iterator = wizardModel.stepIterator();
        while(iterator.hasNext()){
            steps.add(iterator.next());
        }   
    }

    @Override
    public void onActiveStepChanged(IWizardStep newStep) {
        try{
            getIndex();
        } catch (Exception e){
            e.getMessage();
        }
        super.onActiveStepChanged(newStep);
    }
}

Вывод в консоли для первого шага:

class {package}.StepOne > Active
class {package}.StepTwo > Finished
class {package}.StepThree > Finished

При переходе к следующему шагу:

class {package}.StepOne > Finished
class {package}.StepTwo > Active
class {package}.StepThree > Finished

На последнем шаге:

class {package}.StepOne > Finished
class {package}.StepTwo > Finished
class {package}.StepThree > Active

Я не могу объяснить это поведение. Как и в сообщении, на которое я ссылался выше, я хотел бы поделиться этим компонентом, если он работает в конце. Заранее спасибо.

Проблема в том, что шаги, которые я реализовал, еще не имеют реальной цели? Должен ли я вручную устанавливать setComplete(); или что-то еще в моем коде для панелей?


person Peter    schedule 02.10.2015    source источник


Ответы (1)


Значение IWizardStep#isComplete() не то, что вы думаете:

/**
 * Checks if this step is complete. This method should return {@code true} if the wizard can
 * proceed to the next step.
 * 
 * @return {@code true} if the wizard can proceed from this step, {@code false} otherwise.
 */
boolean isComplete();

Обратите внимание на «может ли мастер перейти к следующему шагу».

person svenmeier    schedule 02.10.2015
comment
Хорошо, это означает, что я должен вручную указать шаг, который он ожидает или завершен, с помощью setComplete(); - person Peter; 05.10.2015