Wicket Wizard显示索引的步骤

问题描述:

对于我的Wicket Wizard我想要显示如下信息:“向导步骤1 of 4”。
我开始通过获取的步数,我已经遇到了第一个问题:Wicket Wizard显示索引的步骤

public WizardPanel(String id) { 
    super(id, false); 
    // false deactivates the default style. 
    setDefaultModel(new CompoundPropertyModel<WizardPanel>(this)); 
    WizardModel model = new WizardModel(); 
    model.add(new FirstStep()); 
    model.add(new SecondStep()); 
    model.add(new ThirdStep()); 
    model.add(new ConfirmationStep()); 

    Iterator<IWizardStep> iterator = model.stepIterator(); 
    for(int i = 1; iterator.hasNext(); i ++){ 
     System.out.println(String.valueOf(i)); 
    } 
    init(model); 
} 

我的迭代器创建一个无限循环。不应该只有四个对象可以迭代吗? 还是有没有找到这种分页的基本实现? 因为我的下一步是从model.getActiveStep();中获取当前索引并找出它是哪个数字。

+3

我不知道是否已经有您所要实现的目标的实现,但解决您的您无限循环必须在检查iterator.hasNext()后调用'iterator.next()'。否则Iterator将不会前进,hasNext()将始终返回相同的状态。 – Tekki

+0

谢谢,至少这个问题已经解决了,因为这是原来的问题,你可以用它来解答:-) –

我想我分享我的解决方案(只要它现在是)

public class OverviewComponent extends Panel{ 
    private static final long serialVersionUID = 1L; 
    private List<WizardStep> steps; 
    private WizardModel model; 

    public OverviewComponent(String id, WizardModel model) { 
     super(id); 
     this.model = model; 
     steps = fillList(); 

     this.add(new ListView<WizardStep>("steps", steps) { 
      private static final long serialVersionUID = 1L; 
      /** 
      * Wrap a markup container around the item append a css attribute to every item 
      */ 
      @Override 
      protected void populateItem(ListItem<WizardStep> item) { 
       WebMarkupContainer stepOverviewItem; 
       item.add(stepOverviewItem = new WebMarkupContainer("stepOverviewItem")); 
       stepOverviewItem.add(new Label("index", Model.of(item.getIndex()+1))); 
       stepOverviewItem.add(new AttributeModifier("class", getCSSProperty(item.getModelObject()))); 
       stepOverviewItem.setOutputMarkupId(true); 
       stepOverviewItem.setOutputMarkupPlaceholderTag(true); 
      } 

     }); 
    } 

    public String getCSSProperty(WizardStep step) { 
     if (step.equals(model.getActiveStep())) { 
      return "active"; 
     } else if (!step.isComplete()) { 
      return "pending"; 
     } else if (step.isComplete()) { 
      return "completed"; 
     } 
     return ""; 
    } 

    public List<WizardStep> fillList() { 
     List<WizardStep> iSteps = new ArrayList<WizardStep>(); 
     Iterator<IWizardStep> iterator = model.stepIterator(); 
     while (iterator.hasNext()) { 
      iSteps.add((WizardStep)iterator.next()); 
     } 
     return iSteps; 
    } 
}