myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bernhard Huemer (JIRA)" <...@myfaces.apache.org>
Subject [jira] Commented: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null
Date Fri, 10 Aug 2007 22:17:43 GMT

    [ https://issues.apache.org/jira/browse/MYFACES-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12519142
] 

Bernhard Huemer commented on MYFACES-1670:
------------------------------------------

The problem is a legacy PropertyResolver being required by the JSF 1.2 specification (org.apache.myfaces.el.DefaultPropertyResolver).
This PropertyResolver just has to call "FacesContext.getCurrentInstance().getELContext().setPropertyResolved(false);"
(see JSF 1.2 specification, 5.8.2). However, if the container is evaluating an expression,
it uses its own ELContext implementation (e.g. org.apache.jasper.el.ELContextImpl).

At the beginning I've said that the problem is the legacy PropertyResolver, but that's not
really the case as its expected behaviour is described in the specification. Actually, the
adapter class making it possible to use PropertyResolvers in the ELResolver chain is incorrect.
Before delegating the request to the PropertyResolver it assumes that the property will be
resolved and therefore calls "context.setPropertyResolved(true);". This behaviour is  also
according the specification if I haven't got it wrong (5.6.1.6). If the PropertyResolver is
not able to fulfill the task it just has to call "context.setPropertyResolved(false);", but
remember that a PropertyResolver just knows how to access the FacesELContext. 

Therefore the adapter class has to inform its given context whether the property has been
resolved or not according to the FacesELContext. I'll attach a patch.

> A dollar-type, 2 level EL expression evaluates to null
> ------------------------------------------------------
>
>                 Key: MYFACES-1670
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1670
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-252
>    Affects Versions: 1.2.1-SNAPSHOT
>         Environment: geronimo-2.0-M6-rc1
>            Reporter: Alexander Zynevich
>             Fix For: 1.2.0-SNAPSHOT
>
>         Attachments: Customer.java, CustomerDetailsBean.java, eltest.war, faces-config.xml,
print.jsp, web.xml
>
>
> I have a simple code where dollar-type expression (like ${}) works differently than shrap-type
 expression (like #{}),
> I put into the http session a managed bean aggregating another bean.
> ${parent} is calculated, while ${parent.child} is always null (it is printed as an empty
string and equals to null in "when" tag).
> For example the following snip of JSP code:
>    <f:view>
>     <h:form id="myform" >
>     <b>Using sharp-el</b>: <br/>
>     *<h:outputText id="cll1" value="#{customerDetailsBean}" />*<br/>
>     *<h:outputText id="cll2" value="#{customerDetailsBean.customer}" />*<br/>
>     <b>Using dollar-el</b>: <br/>
>     *${customerDetailsBean}*<br/>
>     *${customerDetailsBean.customer}*<br/>
>     <b>Classical "servlet" style</b>: <br/>
>     *<% if (session.getAttribute("customerDetailsBean") != null) {%><%= session.getAttribute("customerDetailsBean")
%><% } %>*<br/>
>     *<% if (session.getAttribute("customerDetailsBean") != null) {%><%= ((eltest.CustomerDetailsBean)session.getAttribute("customerDetailsBean")).getCustomer()
%><% } %>*<br/>
>     </h:form>
>     </f:view>
> -- PRODUCES --:
>     Using sharp-el:
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     *Customer {frstName: Alex , lastName: Zynevich, id: 1979}*
>     Using dollar-el: 
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     **
>     Classical "servlet" style:
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     *Customer {frstName: Alex , lastName: Zynevich, id: 1979}*
> while I would expect:
>     Using sharp-el: 
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     *Customer {frstName: Alex , lastName: Zynevich, id: 1979}*
>     Using dollar-el: 
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     *Customer {frstName: Alex , lastName: Zynevich, id: 1979}*
>     Classical "servlet" style: 
>     *CustomerDetailsBean: { customer: Customer {frstName: Alex , lastName: Zynevich,
id: 1979}}*
>     *Customer {frstName: Alex , lastName: Zynevich, id: 1979}*
> you may find the maven project at https://issues.apache.org/jira/browse/GERONIMO-3253,
war is attached

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message