1

jsp taglib を使用して依存関係を注入する良い方法はありますか?

ejb 3.0、Spring、または Guice のいずれかを使用...

taglibs で使用したいサービス/pojo がたくさんあります

4

3 に答える 3

1

Seamが必要だと思います。コンポーネントを名前で参照できます。ただし、リリースされたバージョンは JSF ベースですが、それは変更されています。

于 2008-09-26T20:54:41.960 に答える
0

私は同じことをする予定なので、あなたの質問に出くわしました。実際には、Spring とその @Configurable アノテーション (AspectJ のロード時またはコンパイル時のウィービングを使用) を使用して、サービスをタグ実装に挿入できます。すべてのオプションの詳細な説明については、Ramnivas のブログ投稿をご覧ください

それでも解決策が必要な場合に備えて、お役に立てば幸いです...

于 2009-07-20T09:22:50.127 に答える
0

servletContext でインジェクターへの参照を保持し、必要に応じて各タグで使用します。見る

Guice の設定で:

public class GuiceServletConfig extends GuiceServletContextListener {

@Override
protected Injector getInjector() {
    return Guice.createInjector(blah, blah);
}

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
    ServletContext servletContext = servletContextEvent.getServletContext();
    servletContext.removeAttribute(Injector.class.getName());
    super.contextDestroyed(servletContextEvent);
}

@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
    Injector injector = getInjector();
    ServletContext servletContext = servletContextEvent.getServletContext();
    servletContext.setAttribute(Injector.class.getName(), injector);
    super.contextInitialized(servletContextEvent);
}

}

そして、あなたのtaglibで:

@Singleton
@SuppressWarnings("serial")
public class MySampleTag extends TagSupport {
@Inject private MyInjectedService myService;

@Override
public int doStartTag() throws JspException {
    Injector injector = (Injector) pageContext.getServletContext().getAttribute(Injector.class.getName());
    injector.injectMembers(this);

    String value = myService.doSomething();
            etc.
            etc.
于 2014-01-02T00:42:04.327 に答える