[英]How to reset a Spring managed Bean
注意: 这个问题可能与Vaadin有关,也可能不是,这取决于是否有“更好”的解决方案“重置”bean。
背景情景
我正在构建一个向导来输入一些值,这些值在完成后会被发送到一个表(使用Vaadin和附加的“Wizards for Vaadin”)。
加载项没有提供重置向导的方法(即返回到步骤1),而没有强制调用onAdvance()和onBack()方法的当前步骤(重写),这些方法在我的一些步骤中将返回false因为我在那些方法中使用逻辑,以防例如使用没有填写所有必需的数据。
我不能简单地创建一个新的Wizard实例,因为我使用Spring来管理这个@Component。
所以,这让我实际上重置了bean,以便正确地重置向导。
我的问题是
如何“重置”Spring托管Bean(@Component)? 我应该补充一点,这个Bean也有一些依赖注入它。
或者......(对于瓦丁人来说):
除了创建新向导之外,还有另一种重置此向导的方法吗?
一些代码
@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);
}
}
您可能使用的SpringVaadinIntegration不要求所有元素都是@Components,只需要注释UI。
在这种情况下,你的向导及其步骤不应该是组件,如果你真的需要向它们注入依赖项,你可以使用@Configurable注释,它允许将依赖项注入不由Spring管理的类(需要一些更多的配置来使它工作) 。 只需在需要时创建向导和步骤作为新对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.