[英]Accessing @SessionScoped @ManagedBean class in ExternalContext#getSessionMap() returns null
[英]externalContext.getSession(false) returns null
我当前的平台是NB 7 rc 1,我有一个只有一个“托管bean”的JSF 2应用程序。 及时地,我正在使用Tomcat 7.0.34。
这是发生错误的代码:
@ManagedBean
@SessionScoped
public class CopyController implements Serializable {
private static final long serialVersionUID = 1L;
private String pathBancoSentencas;
private List<Arquivo> arquivosUpload;
private HttpSession session;
private List<String> listaPdfs;
public List<Arquivo> getArquivosUpload() {
return arquivosUpload;
}
public void setArquivosUpload(List<Arquivo> arquivosUpload) {
this.arquivosUpload = arquivosUpload;
}
public CopyController() {
arquivosUpload = new ArrayList<Arquivo>();
}
@PostConstruct
public void doInit() {
session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
pathBancoSentencas = (String)session.getAttribute("DIRETORIO_TRABALHO");
}
处理完请求后,例程将调用如下视图:
<p:dataTable value="#{copyController.arquivosUpload}" var="arquivo" paginator="true" paginatorPosition="bottom"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}">
<f:facet name="header">
Item processado
</f:facet>
<h:column>
<h:outputText value="#{arquivo.nome}" />
</h:column>
</p:dataTable>
但是,不会显示该视图,并且会发生此错误:
Caused by: java.lang.NullPointerException
at br.jus.tjmg.dspace.copy.CopyController.doInit(CopyController.java:54)
... 70 more
有人能帮我吗? 谢谢!
在您的doInit()
方法中,
getExternalContext().getSession(false);
如果当前尚未创建会话,则返回null
。 但是,您显然希望在下一行中有一个非null
会话。
您需要传递true
才能触发自动创建。
getExternalContext().getSession(true);
另请参阅javadoc (重点是我的):
如果
create
参数为true
,请创建(如有必要)并返回与当前请求关联的会话实例。 如果create
参数为false
返回与当前请求关联的任何现有会话实例, 如果没有此类会话 ,则返回null
。
与具体问题无关 ,整个doInit()
方法是不必要的,可以用@ManagedProperty
代替:
@ManagedProperty("#{DIRETORIO_TRABALHO}")
private String pathBancoSentencas;
或者,如果您绝对肯定需要在doInit()
执行此操作, doInit()
好的方法是从ExternalContext#getSessionMap()
获取它。
pathBancoSentencas = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("DIRETORIO_TRABALHO");
您应该尝试避免在JSF支持bean中导入javax.servlet.*
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.