You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Daniel Dekany (JIRA)" <ji...@apache.org> on 2017/08/10 18:08:00 UTC

[jira] [Commented] (FREEMARKER-67) Doesn't support org.bson.Document's correct order of keys.

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

Daniel Dekany commented on FREEMARKER-67:
-----------------------------------------

The default behavior is like that for backward compatibility, but since 2.3.22 you can explicitly chose a better behavior that doesn't have this problem.

I assume {{configuratoin.objectWrapper}} is a {{DefaultObjectWrapper}} there (that's the default). {{DefaultObjectWrapper}} has a {{useAdaptersForContainers}} property. When that's {{true}}, the iteration order of all kind of {{Map}}-s will be exactly the same as in Java. So it doesn't have to be something well known like {{LinkedHashMap}}. How to set that to {{true}}:
* If you never set {{configuration.objectWrapper}} (so you are using the default), then you can set {{Configuration.incompatibleImprovements}} to at least 2.3.22 (but higher is better usually), as then that's inherited by the default {{ObjectWrapper}} as well. However, especially for a product that's already released, check http://freemarker.org/docs/api/freemarker/template/Configuration.html#Configuration-freemarker.template.Version- to asses the risk. 
* If you do set {{configuration.objectWrapper}} (hence overriding the default value of it), or if changing {{Configuration.incompatibleImprovements}} seems to be too risky in your case, then you have to set {{DefaultObjectWrapper.incompatibleImprovements}} to at least 2.3.22 (see http://freemarker.org/docs/api/freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-).

> Doesn't support org.bson.Document's correct order of keys.
> ----------------------------------------------------------
>
>                 Key: FREEMARKER-67
>                 URL: https://issues.apache.org/jira/browse/FREEMARKER-67
>             Project: Apache Freemarker
>          Issue Type: Bug
>          Components: engine
>    Affects Versions: 2.3.23, 2.3.24-incubating, 2.3.25-incubating, 2.3.26-incubating
>         Environment: Windows7, jdk1.8.0_131 64bit, Tomcat 8.0.45, SpringMVC 4.3.10.RELEASE, mongo-java-driver 3.4.2
>            Reporter: Pu Zhongqiang
>            Priority: Minor
>              Labels: features
>
> In mongodb's Java Driver 3.x, org.bson.Document is a representation of a bson document as a Map. Although org.bson.Document is not a subclass of LinkedHashMap, it really DOES maintain a meaningful order for its keys.
> It works good if I use LinkedHashMap to load data.
> {code:java}
> LinkedHashMap<String,Object> accepted_sorts = new LinkedHashMap<>();
> accepted_sorts.put("-favorite_time", "Hello");
> accepted_sorts.put("-publish_time", "Welcome");
> model.put("accepted_sorts", accepted_sorts);
> {code}
> {code:html}
> <#list accepted_sorts?keys as value>
> 	${value?string}
> </#list>
> <br>
> <#list accepted_sorts as key,value>
> 	${key?string},${value?string}
> </#list>
> {code}
> it rendered as: 
> {code:html}
> -favorite_time -publish_time 
> -favorite_time,Hello -publish_time,Welcome 
> {code}
> But Freemarker doesn't support  org.bson.Document's correct key order. You can see my test below:
> {code:java}
> Document accepted_sorts = new Document();
> accepted_sorts.put("-favorite_time", "Hello");
> accepted_sorts.put("-publish_time", "Welcome");
> model.put("accepted_sorts", accepted_sorts);
> {code}
> {code:html}
> <#list accepted_sorts?keys as value>
> 	${value?string}
> </#list>
> <br>
> <#list accepted_sorts as key,value>
> 	${key?string},${value?string}
> </#list>
> {code}
> it rendered as wrong order: 
> {code:html}
> -publish_time -favorite_time 
> -publish_time,Welcome -favorite_time,Hello 
> {code}
> So, in the end, I wish freemarker can add support for org.bson.Document's correct order of keys.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)