【发布时间】:2012-11-05 00:58:44
【问题描述】:
在我的代码中,我有一个简单的Phase Listener。
public class PhaseTracker implements PhaseListener {
private static final Logger LOGGER = LoggerFactory.getLogger(PhaseTracker.class);
@Override
public void afterPhase(PhaseEvent pe) {
LOGGER.debug("afterPhase " + pe.getPhaseId());
LOGGER.debug(""+FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("haveErrors"));
}
@Override
public void beforePhase(PhaseEvent pe) {
LOGGER.debug("beforePhase " + pe.getPhaseId());
boolean error = false;
Iterator<FacesMessage> messageIterator = pe.getFacesContext().getMessages();
while (messageIterator.hasNext()) {
FacesMessage message = messageIterator.next();
if (message.getSeverity().equals(FacesMessage.SEVERITY_ERROR)) {
LOGGER.debug("beforePhase severity is error");
error = true;
}
}
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("haveErrors", error);
LOGGER.debug(""+FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("haveErrors"));
}
@Override
public PhaseId getPhaseId() {
LOGGER.debug("getPhaseId");
return PhaseId.ANY_PHASE;
}
}
问题是当我在XHTML 文件中尝试访问变量时
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("haveErrors")
我有一个null 来源,但我不明白为什么。
【问题讨论】:
-
您不能在 Facelets (XHTML) 文件中编写 Java 代码,因此很难理解/可视化您究竟是如何尝试访问它的。此外,与具体问题无关,这种相当笨拙的方法也可以通过在 EL 中评估
#{facesContext.validationFailed}来实现,而不需要整个阶段侦听器。 -
javadoc中刚刚提到。
标签: jsf