Hi,
On Fri, Jan 15, 2016 at 4:31 PM, Xavier Dury <kalgon_at_hotmail.com> wrote:
>
>         String attribute = (String) property;
>         FacesContext facesContext = (FacesContext)
> context.getContext(FacesContext.class);
>         ExternalContext ec = facesContext.getExternalContext();
>         if ((ec.getRequestMap().get(attribute)) != null) {
>                 ec.getRequestMap().put(attribute, val);
>         } else if ((facesContext.getViewRoot()) != null &&
> (facesContext.getViewRoot().getViewMap().get(attribute)) != null) {
>                 facesContext.getViewRoot().getViewMap().put(attribute,
> val);
>         } else if ((ec.getSessionMap().get(attribute)) != null) {
>                 ec.getSessionMap().put(attribute, val);
>         } else if ((ec.getApplicationMap().get(attribute)) != null) {
>                 ec.getApplicationMap().put(attribute, val);
>         } else {
>                 // if the property doesn't exist in any of the scopes, put
> it in
>                 // request scope.
>                 ec.getRequestMap().put(attribute, val);
>         }
>
This code seems indeed problematic. The view map is created only to check
it, which not only causes an annoying warning, it also causes the creation
of a session.
The same thing holds for the session map check.
ec.getSessionMap().get(attribute) will create a session, even when this
would not be needed.
For some types of applications, the needless creation of sessions is a
serious problem. So regardless of the message being annoying or not, or
clear or not, this session creation seems problematic to me.
The question is; how strict is the spec about mandating this?
Regardless, wouldn't changing the value expression mentioned in the issue
to one that explicitly contains the scope work around a particular instance
of this problem?
E.g.
ValueExpression ve = ef.createValueExpression(context.getELContext(),
"#{requestScope.id}", Object.class);
instead of
ValueExpression ve = ef.createValueExpression(context.getELContext(),
"#{id}", Object.class);
?