2008-09-26 7 views

Répondre

1

Je pense que vous voulez Seam, il vous permet faire référence à un composant par son nom. Cependant, la version publiée est basée sur JSF, mais cela change.

0

juste tombé sur votre question parce que je prévois de faire la même chose. Vous pouvez réellement utiliser Spring et son annotation @Configurable (avec le temps de chargement AspectJ ou le tissage à la compilation) pour injecter des services dans vos implémentations de balises. Pour une explication détaillée de toutes les options, jetez un oeil à l'article de blog de Ramnivas here.

Espoir pour aider au cas où vous avez encore besoin d'une solution ...

0

Gardez une référence à votre injecteur sur ServletContext puis utiliser dans chaque étiquette que vous en avez besoin. Voir

Dans votre configuration 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); 
} 

}

Et puis dans votre 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. 
Questions connexes