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

Leonardo Uribe commented on MYFACES-3964:
-----------------------------------------

I have checked the problem and I notice something curious. If you set this 
param:

 <context-param>
    <param-name>org.apache.myfaces.CACHE_EL_EXPRESSIONS</param-name>
    <param-value>alwaysRecompile</param-value>
 </context-param>

The example provided works. 

Since 1.1.x c:forEach uses variable mapper to store the value of the iterated 
EL expression. 

The reason why enable that param works is because the fix in place for 
alwaysRecompile uses an "indirection" hack to store the value not in the EL 
expressions using the variable mapper (in that case the value is stored when 
the EL is created, that's why it doesn't change), but store that into 
FaceletState "binding" map. Then, the algorithm inside c:forEach is already 
able to refresh the values and if the values are refreshed, the example will 
work.

The solution is make the indirection hack the default and only mode used by 
c:forEach in any situation. It has a lot more sense to decouple any state from 
the EL generation. This is a risky change, it requires some additional testing 
to see if it works well.

> c:foreach not working when using custom equals or non serializable objects
> --------------------------------------------------------------------------
>
>                 Key: MYFACES-3964
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3964
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.2.7
>            Reporter: Gonçalo Manuel Cruchinho
>         Attachments: MyFaces22Test.war
>
>
> c:foreach doesn't work as intended when using an object with an overriden 
> equals. The same problem is observed when using an non serializable object. 
> In both cases the problem seems to be that the foreach component caches and 
> uses an outdated reference to the object.
> When using a serializable object with a non overwriten equals method, all 
> works as intended.
> When forcing org.apache.myfaces.STRICT_JSF_2_FACELETS_COMPATIBILITY as true 
> on the web.xml file, all works as intended.
> When using ui:repeat, all works as intended.
> I created a test case that demonstrates the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to