ПРИМЕЧАНИЕ: Эта проблема может быть или не быть связана с Ваадином, в зависимости от того, существует ли «лучшее» решение для «сброса» компонента или нет.Как сбросить весенний бобин
Фоновая сценарий
Я строю мастера для ввода нескольких значений, которые, когда закончено, отправляется в таблицу (с помощью Vaadin и надстройку «Wizards для Vaadin»).
Это дополнение не предоставляет способ сбросить настройки мастера (т.е. вернуться к шагу 1) без принудительного вызова текущих шагов (переопределенных) методов onAdvance() и onBack(), которые вернут false в некоторые из моих шагов, потому что я использую логику в этих методах, если использование, например, не заполнило все требуемые данные.
Я не могу создать новый экземпляр мастера, потому что я использую Spring для управления этим @Component.
Итак, это оставляет меня с фактическим сбросом компонента, чтобы правильно восстановить мастер.
Мой вопрос
Как "сбросить" родника удалось 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);
}
}
Ваше предложение звучит разумно, и вы правы в своем предположении, что я использую SVI. У меня было чувство, что я делаю что-то неправильно здесь, также я не знал о аннотации @Configuration. Я попробую это первое завтра и вернусь к результатам! Благодаря! – Roger
Я не понимаю, как настроить '@ Configuration', чтобы заставить' Wizard' (POJO) принять '@ Inject'. Я создал простой пример после чтения в документации Spring '@ Configuration', используя аннотированный класс AppConfig' @ Configuration', который создает «новый мастер» и простой «@ Component», который должен иметь «Мастер» использовать ('MyService'). Однако в документации не упоминается ничего (что я мог найти) при фактическом вводе компонента (например, «MyService») в «POJO-ized» 'Wizard'. Когда я пытаюсь, я получаю «BeanCreationException». Любые подсказки? – Roger
Извините, я отредактировал позже, аннотация @Configurable – dzezzz