如何将initParam的值注入托管bean?

时间:2012-12-26 15:07:37

标签: jsf managed-bean

我在web.xml中有一个context-param:

<context-param>
        <description>Version number will be prefixed to url of requests</description>
        <param-name>version_id</param-name>
        <param-value>11</param-value>
</context-param>

我想将其注入ManagedBean 该bean的范围为无

我尝试了下面的代码,但是它没有用,我在启动时遇到这个错误的异常:

表达式#{initParam [version_id]},application引用的对象的范围比引用的托管bean(responseData)范围更短

@ManagedBean
@NoneScoped
public class ResponseData implements Serializable {


    @ManagedProperty(value = "#{initParam.version_id}")
    private String version;


    public ResponseData() {
    }

    /**
     * @param version the version to set
     */
    public void setVersion(String version) {
        this.version = version;
    }

}

将context-param的值作为托管属性注入托管bean的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您尝试的是尝试获取范围小于NonScoped的ResponseData托管bean的托管属性的值。

您应该能够从ServletContext获取上下文参数,而无需引用另一个bean。

ServletContext servletContext = (ServletContext) FacesContext
   .getCurrentInstance().getExternalContext().getContext();
servletContext.getInitParameter("version_id");