来自非servlet的web.xml参数,在JSF生命周期之外

时间:2014-10-01 14:04:31

标签: jsf web.xml context-param

如何让web.xml参数不在JSF生命周期之外和Servlet之外? 我能找到的只是与servlet,jsf请求或Spring或Struts等框架的特定方法有关。

从纯Java EE中获取web.xml配置是否很难?

实践中

getServletContext().getInitParameter("ContextParam");
FacesContext.getCurrentInstance().getExternalContext().getInitParameterMap();

都不可用。

2 个答案:

答案 0 :(得分:0)

创建一个ServletContextListener和一个类,例如AppContext带有一些staitc字段

class AppContext {
   static String param = null;

   public satitc void setParam(String p) {
        param = p;
   }

   public satitc getParam() {
        return param;
   }
}

在方法contextInitialized中,阅读参数并将其设置为AppContext

@Override
public void contextInitialized(ServletContextEvent arg0) {
    AppContext.setParam(arg0.getServletConext().getInitParameter("ContextParam"));
}

在任意位置使用AppContext#getParam()方法。

Here a small tutorial on this topic

答案 1 :(得分:0)

当您的应用程序加载时,您可以从init参数获取此信息并保存以便在其他时间使用ServletContextListener,如下所示:

public class TestListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        String yourVariable = servletContextEvent.getServletContext().getInitParameter("yourParameter");
        //Some code..
    }
}

在web.xml中定义此侦听器:

<web-app ...>
   <listener>
    <listener-class>
             com.fullanem.TestListener 
        </listener-class>
   </listener>
</web-app>

在web.xml中定义参数:

 <context-param>  
    <description>This is a context parameter example</description>  
    <param-name>yourParameter</param-name>  
    <param-value>Your value</param-value>  
  </context-param> 

所以你把它存储在你想要的地方,作为属性,全局变量,或者任何地方。