Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 获取会话映射_Jsf - Fatal编程技术网

Jsf 获取会话映射

Jsf 获取会话映射,jsf,Jsf,在我的代码中,我有一个简单的阶段侦听器 public class PhaseTracker implements PhaseListener { private static final Logger LOGGER = LoggerFactory.getLogger(PhaseTracker.class); @Override public void afterPhase(PhaseEvent pe) { LOGGER.debug("afterPhase

在我的代码中,我有一个简单的
阶段侦听器

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;
    }
}
我有一个
null
源代码,我不明白为什么。

像这样试试

 public synchronized void beforePhase(PhaseEvent event) {

        FacesContext context = event.getFacesContext();
        ExternalContext ex = context.getExternalContext();

 String viewId = "/index.xhtml";

        if (context.getViewRoot() != null && context.getViewRoot().getViewId() != null) {
            viewId = context.getViewRoot().getViewId();

        }

        String localeCode = (String) ex.getSessionMap().get("localeCode");

        if (localeCode == null) {
            ex.getSessionMap().put("localeCode", "en");
            context.getViewRoot().setLocale(new Locale("en"));
            // System.out.println("locale code " +"En?");
        } else if (localeCode != null) {
            //System.out.println("locale code " +localeCode);
            ex.getSessionMap().put("localeCode", localeCode);
            context.getViewRoot().setLocale(new Locale(localeCode));
        }

您无法在Facelets(XHTML)文件中编写Java代码,因此很难理解/可视化您试图访问它的确切方式。此外,与具体问题无关,这种相当笨拙的方法也可以通过在EL中计算
{facesContext.validationFailed}
来实现,而不需要整个阶段的侦听器。
 public synchronized void beforePhase(PhaseEvent event) {

        FacesContext context = event.getFacesContext();
        ExternalContext ex = context.getExternalContext();

 String viewId = "/index.xhtml";

        if (context.getViewRoot() != null && context.getViewRoot().getViewId() != null) {
            viewId = context.getViewRoot().getViewId();

        }

        String localeCode = (String) ex.getSessionMap().get("localeCode");

        if (localeCode == null) {
            ex.getSessionMap().put("localeCode", "en");
            context.getViewRoot().setLocale(new Locale("en"));
            // System.out.println("locale code " +"En?");
        } else if (localeCode != null) {
            //System.out.println("locale code " +localeCode);
            ex.getSessionMap().put("localeCode", localeCode);
            context.getViewRoot().setLocale(new Locale(localeCode));
        }