注意:这个问题可能与Vaadin相关,也可能不相关,具体取决于是否有“更好”解决“重置”bean的问题。
背景情景
我正在构建一个向导来输入一些值,这些值在完成后会被发送到一个表(使用Vaadin和附加的“Wizards for Vaadin”)。
加载项不提供重置向导的方法(即返回步骤1),而不强制调用onAdvance()和onBack()方法的当前步骤(重写),这些方法将返回false我的步骤是因为我在这些方法中使用逻辑,以防例如用途没有填写所有必需的数据。
我不能简单地创建一个新的Wizard实例,因为我使用Spring来管理这个@Component。
因此,这使我实际上重置了bean,以便正确地重置向导。
我的问题是
如何“重置”Spring托管Bean(@Component)?我应该补充一点,这个Bean也有一些依赖注入它。
或......(对于Vaadin人):
除了创建新向导之外,还有其他方法可以重置此向导吗?
部分代码
@Component
@Scope("session")
public class MyWizard extends Wizard {
@Inject
private MyWizardContainer myWizardContainer;
@Inject
private MyService myService;
@Inject
private MyWizardStep1 myWizardStep1;
@Inject
private MyWizardStep2 myWizardStep2;
@Inject
private MyWizardStep3 myWizardStep3;
@Inject
private MyMainTableContainer myMainTableContainer;
final static Logger logger = LoggerFactory.getLogger(MyWizard.class);
private static final long serialVersionUID = 1L;
public MyWizard() {
setupListener();
}
public void addSteps() {
this.addStep(myWizardStep1);
this.addStep(myWizardStep2);
this.addStep(myWizardStep3);
this.mainLayout.setComponentAlignment(this.footer, Alignment.BOTTOM_LEFT);
}
private void setupListener() {
this.addListener(new WizardProgressListener() {
@Override
public void wizardCompleted(WizardCompletedEvent event) {
endWizard("Wizard Finished Successfully!");
}
@Override
public void wizardCancelled(WizardCancelledEvent event) {
endWizard("Wizard Cancelled!");
}
@Override
public void stepSetChanged(WizardStepSetChangedEvent event) {
// TODO Auto-generated method stub
}
@Override
public void activeStepChanged(WizardStepActivationEvent event) {
// TODO Auto-generated method stub
}
});
}
private void resetWizard() {
myWizardContainer.removeAll(); //here I'm simply resetting all data that the user generated thus far in the wizard
this.activateStep(myWizardStep1); //this will not work, as some steps will not always return true on onBack() and/or onAdvance()
}
private void endWizard(String message) {
resetWizard();
this.setVisible(false);
Notification.show(message);
}
}
答案 0 :(得分:2)
在这种情况下,你的向导和它的步骤不应该是组件,如果你真的需要在它们中注入依赖项,你可以使用@Configurable注释,这允许将依赖项注入不由Spring管理的类(需要更多的配置)这行得通)。只需在需要时创建向导和步骤作为新对象。