注意:这个问题可能与Vaadin有关,也可能与Vaadin无关,这取决于是否有“更好的”解决方案来“重置”bean。
背景场景
我正在构建一个用于输入一些值的向导,当这些值完成时,将发送到一个表(使用Vaadin和加载项“Wizards for Vaadin”)。
该加载项没有提供一种方法来重置向导(即返回到步骤1)而不强制调用当前steps(重写)onAdvance()和onBack()方法,这些方法在我的一些步骤中将返回false,因为我在这些方法中使用逻辑,以防使用(例如)没有填写所有必需的数据。
我不能简单地创建向导的一个新实例,因为我正在使用Spring来管理这个@组件。
因此,这使我需要实际重置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未管理的类(需要一些更多的配置来使其工作)。只需在需要时将向导和步骤创建为新对象即可。
我有一个自己初始化的bean,我想让这个方法变成事务性的。 使用这种方法,可以在中工作,但是仍然不能工作,但是如果我使用spring托管bean,事务可以工作,回滚和数据库锁定都可以工作。
我坚持从普通Java到Spring的简单重构。应用程序有一个“容器”对象,该对象在运行时实例化其部分。让我用代码解释一下: 基本上,在加载容器期间,要求一些外部系统向他提供关于每个的数量和配置的信息,然后它根据给定的规范创建bean。 问题是:通常当我们在Spring这样做的时候 我们的对象已完全配置,并已注入所有依赖项。但是在我的例子中,我必须实例化一些对象,在我执行load()方法后,这些对象
我使用MeteorJS构建了一个web应用程序,并将其推送到GitHub。现在我也想在GitHub上发布/部署它,这样同事和讲师就可以在GitHub上查看页面及其文件了。 我知道我可以在Meteor.com上部署它,但我想知道是否可以在GitHub上部署它。 有谁能详细列出所有的步骤如何做吗?任何帮助都将不胜感激。
我使用JSF和托管Beans创建了一个简单的应用程序。从托管bean,我试图实例化一个将数据存储到数据库的spring bean。然而,“@autowired”注释似乎不起作用,因为我得到了一个nullpointerexcpetion。我阅读了关于如何在Spring中使用JSF和托管bean的所有相关主题,但不能解决这个问题。也许有人可以看看下面的代码,给我一个提示? 服务Bean faces.c
问题内容: 我坚持了从纯Java到Spring的简单重构。应用程序具有一个“容器”对象,该对象在运行时实例化其部分。让我用代码解释一下: 基本上,在装入容器时,它要求某个外部系统向他提供有关每个RuntimeBean的数量和配置的信息,然后根据给定的规范创建bean。 问题是:通常在春季时 我们的对象已完全配置,并注入了所有依赖项。但就我而言,我必须实例化一些对象,这些对象在执行load()方法后
是否可以在Spring Boot中集成Spring托管Hibernate拦截器(http://docs.jboss.org/Hibernate/orm/4.3/manual/en-us/html/ch14.html)? 我正在使用Spring Data JPA和Spring Data REST并需要一个Hibernate拦截器来处理实体上特定字段的更新。 对于标准的JPA事件,不可能获得旧值,因此