2012-12-26 60 views
1

我有一個的context-param在web.xml:如何將initParam的值注入託管bean?

<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這有一個範圍無

我嘗試下面的代碼,但它不工作,我「M得到一個例外在啓動時與此錯誤:

由表達式#引用的對象的範圍{initParam [VERSION_ID]},應用,比參照管理豆(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

您試圖獲取的是託管屬性的值比ResponseData託管bean的範圍小,該託管屬性的範圍是NoneScoped。

但是,您應該能夠從ServletContext獲取上下文參數,而無需引用另一個bean。

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

'ExternalContext'有一個更容易的代理方法。 – BalusC