How do I access a managed bean from a phaselistener without it knowing
the faces-config.xml name of the bean? I have 1 phaselistener that
acts across hundreds of pages that each have one managed bean. All the
managed beans subclass the same base class.

All pages are a composition of the same template and as a parameter
for that template all pages set a <ui:param> with the name
"managedbean" that references the actual bean for that page:

<ui:composition template="/WEB-INF/template.xhtml">
        <ui:param name="managedbean" value="#{someBean}" />
        <ui:define name="content">...

>From the phaselistener I tried accessing the managed bean through the
param name "managedbean" but that is not accessible (at least not in
the UPDATE_MODEL_VALUES phase):

        @Override
        public void afterPhase(PhaseEvent event) {
                ...
                Base neededBean = (Base) facesContext
                                
.getApplication().evaluateExpressionGet(facesContext,"#{managedbean}",Base.class);


The line above returns null unless I change the EL to refer directly
to a bean name from faces-config.xml. I can't find the "managedbean"
through the external context parameters either.

I also tried setting "managedbean" in a scope using the Set tag:

                <c:set var="scopedmanagedbean" value="#{managedbean}" 
scope="request"/>

But the attribute is not in the request scope when tested from the
phaselistener using:

                 HttpServletRequest req = (HttpServletRequest) facesContext
                                
.getCurrentInstance().getExternalContext().getRequest().getAttributeNames();


Anyone know to get hold of the bean through the ui:param ?

Reply via email to