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();
中获取当前索引并找出它是哪个数字。
答
我想我分享我的解决方案(只要它现在是)
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;
}
}
我不知道是否已经有您所要实现的目标的实现,但解决您的您无限循环必须在检查iterator.hasNext()后调用'iterator.next()'。否则Iterator将不会前进,hasNext()将始终返回相同的状态。 – Tekki
谢谢,至少这个问题已经解决了,因为这是原来的问题,你可以用它来解答:-) –