4
在我的代碼我有一個簡單的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}來實現,而不需要整個階段偵聽器。 – BalusC
它剛剛在javadoc中提到。 – BalusC