1

SpringVaadinIntegration アドオン全体で Spring と Vaadin を使用してアプリケーションを開発しています。現在、メインの Vaadin UI クラスにサービスを注入すると、すべてがうまく機能します。問題は、この注釈を他のクラスで使用することです。

これはマイサービスです

@Component
@Scope("session")
public class MyService {

public MyService() {
    // TODO Auto-generated constructor stub
}

public String getLabel(){
    return "this is my label";
}

public void saveUser(Utente utente){
    System.out.println("save user");
}

}

これは私のメインの Vaadin UI クラスです

@Component
@Scope("prototype")
public class MyUI extends UI
{

@Autowired
private transient ApplicationContext applicationContext;

@Autowired
private MyService myService;

private MainPanel mainPanel;

private VerticalLayout verticalLayout; 




@Override
protected void init(VaadinRequest request) {
    // TODO Auto-generated method stub


    verticalLayout = new VerticalLayout();

    mainPanel = new MainPanel();
    verticalLayout.addComponent(mainPanel);
    setContent(verticalLayout);


}
  }

MyUI では @autowired が機能し、実際には myservice は null ではありませんが、メイン パネルでは機能しません

@Component
public class MainPanel extends CustomComponent implements View {

private VerticalLayout mainLayout;

private Button button;

@Autowired
MyService  secondService;

public MainPanel() {
    buildMainLayout();
    setCompositionRoot(mainLayout);

    // TODO add user code here
}

@AutoGenerated
private VerticalLayout buildMainLayout() {
    // common part: create layout
    button = new Button();
    mainLayout = new VerticalLayout();
    mainLayout.addComponent(button);

    button.addClickListener(new Button.ClickListener() {

        @Override
        public void buttonClick(ClickEvent event) {
            // TODO Auto-generated method stub
            secondService.saveUser(new Utente());

        }
    }); 


    return mainLayout;
}
 }

ここでユーザーを保存しようとすると、サービスは null です。私は何を間違っていますか?

4

1 に答える 1

0

MainPanel を「new MainPanel();」として作成しました。メインパネルはSpring Beanではないため、インジェクションは行われません。

この MainPanel を、おそらく ptototype スコープを使用した Spring インジェクションに置き換えます。MainPanel 内のインジェクションは問題ありません。

于 2014-03-25T09:15:43.597 に答える