2015-09-25 88 views
0

對於我的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

謝謝,至少這個問題已經解決了,因爲這是原來的問題,你可以用它來解答:-) –

回答

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