- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:此问题可能与 Vaadin 相关,也可能无关,具体取决于是否有“更好”的解决方案来“重置”bean。
背景场景
我正在构建一个向导,用于输入一些值,完成后,将其发送到表格(使用 Vaadin 和附加组件“Wizards for Vaadin”)。
该插件不提供重置向导的方法(即返回步骤 1),而无需强制调用当前步骤(覆盖)的 onAdvance() 和 onBack() 方法,这在某些情况下会返回 false我的步骤,因为我在这些方法中使用逻辑,以防万一使用例如没有填写所有必需的数据。
我无法简单地创建向导的新实例,因为我正在使用 Spring 来管理这个 @Component。
因此,这让我需要实际重置 Bean,以便正确重置向导。
我的问题是
如何“重置”Spring 管理的 Bean (@Component)?我应该补充一点,这个 Bean 还注入(inject)了一些依赖项。
或者...(对于 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);
}
}
最佳答案
您可能使用的 SpringVaadinIntegration 并不要求所有元素都为 @Component,只需对 UI 进行注释。
在这种情况下,您的向导及其步骤不应该是组件,如果您确实需要将依赖项注入(inject)其中,您可以使用 @Configurable 注释,它允许将依赖项注入(inject)到不受 Spring 管理的类(需要进行更多配置)这行得通)。只需在需要时将向导和步骤创建为新对象即可。
关于java - 如何重置 Spring 托管 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20974420/
我是一名优秀的程序员,十分优秀!