You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Alexander Zynevich (JIRA)" <de...@myfaces.apache.org> on 2007/06/24 16:07:26 UTC

[jira] Created: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null

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
         Environment: geronimo-2.0-M6-rc1
            Reporter: Alexander Zynevich
             Fix For: 1.2.0-SNAPSHOT
         Attachments: eltest.war

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.


[jira] Updated: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null

Posted by "Martin Marinschek (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Marinschek updated MYFACES-1670:
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.2.1-SNAPSHOT
         Assignee: Martin Marinschek
           Status: Resolved  (was: Patch Available)

Sounds reasonable. Thanks Bernhard!

regards,

Martin

> 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
>            Assignee: Martin Marinschek
>             Fix For: 1.2.1-SNAPSHOT, 1.2.0-SNAPSHOT
>
>         Attachments: Customer.java, CustomerDetailsBean.java, eltest.war, faces-config.xml, MYFACES-1670.patch, 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.


[jira] Updated: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null

Posted by "Bernhard Huemer (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Bernhard Huemer updated MYFACES-1670:
-------------------------------------

    Status: Patch Available  (was: Open)

> 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, MYFACES-1670.patch, 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.


[jira] Commented: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null

Posted by "Bernhard Huemer (JIRA)" <de...@myfaces.apache.org>.
    [ 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.


[jira] Commented: (MYFACES-1670) A dollar-type, 2 level EL expression evaluates to null

Posted by "Alexander Zynevich (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12507689 ] 

Alexander Zynevich commented on MYFACES-1670:
---------------------------------------------

just rechecked this smallest application in Glassfish, it did produce output as expected,
I also recheck it on Geronimo with different <managed-bean-scope>: application, request, session. Result is always the same and incorrect.

> 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
>         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.