-1

我怎样才能让 web.xml 参数在 JSF 生命周期和 Servlet 之外?我能找到的只是 servlet、jsf 请求或 Spring 或 Struts 等框架的特定方法。

在纯 Java EE 中从 web.xml 获取配置有那么难吗?

在实践中

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

两者都不可用。

4

2 回答 2

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()

这里有一个关于这个主题的小教程

于 2014-10-01T14:12:38.030 回答
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> 

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

于 2014-10-01T14:15:43.313 回答