我在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的正确方法是什么?
答案 0 :(得分:1)
您尝试的是尝试获取范围小于NonScoped的ResponseData托管bean的托管属性的值。
您应该能够从ServletContext
获取上下文参数,而无需引用另一个bean。
ServletContext servletContext = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
servletContext.getInitParameter("version_id");