Java EE 6: Comment injecter ServletContext dans managed bean
(Java EE 6 avec Glassfish 3.1)
J'ai un fichier de propriété que je veux processus une seule fois, au démarrage, j'ai donc fait cela
public class Config implements ServletContextListener{
private static final String CONFIG_FILE_PATH = "C:\\dev\\harry\\core.cfg";
private static final String CONFIG_ATTRIBUTE_NAME = "config";
private long startupTime;
private ConfigRecord config;
@Override
public void contextInitialized(ServletContextEvent sce) {
this.startupTime = System.currentTimeMillis() / 1000;
this.config = new ConfigRecord(CONFIG_FILE_PATH); //Parse the property file
sce.getServletContext().setAttribute(CONFIG_ATTRIBUTE_NAME, this);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//Nothing to do here
}
public ConfigRecord getConfig() {
return config;
}
public long getStartupTime() {
return startupTime;
}
}
et dans web.xml
, je m'inscrire comme suit
<listener>
<listener-class>com.wf.docsys.core.servlet.Config</listener-class>
</listener>
Maintenant, comment puis-je accéder à la ConfigRecord config
du managed bean. J'ai essayer cette
@ManagedBean
@RequestScoped
public class DisplayInbound {
@EJB
private CoreMainEJBLocal coreMainEJBLocal;
@javax.ws.rs.core.Context
private ServletContext servletContext;
public void test(){
Config config = (Config) servletContext.getAttribute("config")
ConfigRecord configRecord = config.getConfig();
}
}
Je ne pense pas que cela fonctionne. Obtenu NullPointerException
.
OriginalL'auteur Thang Pham | 2011-06-27
Vous devez vous connecter pour publier un commentaire.
Que
@Contexte
annotation n'est applicable que dans un JAX-RS contrôleur, pas dans un managed bean JSF. Vous devez utiliser@ManagedProperty
à la place. LeServletContext
est disponible parExternalContext#getContext()
. LeFacesContext
lui-même est disponible en#{facesContext}
.Ou parce que vous avez stockées à l'auditeur comme un servletcontext attribut, qui est essentiellement la même que dans le cadre du programme de l'application, vous pouvez également vous suffit de le définir comme propriété gérée par son nom d'attribut:
Mais puisque vous êtes sur le JSF 2.0, je vous suggère d'utiliser un
@ApplicationScoped
@ManagedBean
à la place qui est très construit. Avec@PostConstruct
et@PreDestroy
dans un bean vous avez semblable crochets de la webapp de démarrage et d'arrêt comme dans unServletContextListener
.Vous pouvez injecter dans un autre haricots habituelles
@ManagedProperty
chemin d'accès et dans les points de vue habituels EL.OriginalL'auteur BalusC