[JAVA] Pourquoi FreeMarker? Trier ne fonctionne-t-il pas avec List <String>?

Pourquoi avez-vous rencontré cette situation

J'écrivais un modèle JBake en FTL. Personne n'utilise JBake, non? Eh bien, c'est bien, mais il y a des informations telles qu'une liste de toutes les balises utilisées dans les articles sur le site, et il semble que cela soit organisé dans l'ordre dans lequel JBake explore les données d'article à traiter et les trouve. est. La commande est en panne.

Si vous l'éteignez tel quel, il aura l'air mauvais. L'ordre que vous utilisez n'a pas d'importance, vous devez donc les organiser de manière régulière. C'est pourquoi j'ai vérifié l'intégration FTL.

Eh, pourquoi est-ce une erreur?

C'est pourquoi je regarde le site FreeMarker. Ensuite, il y a le build-in souhaité.

TEMPLATE


<#assign ls = ["whale", "Barbara", "zeppelin", "aardvark", "beetroot"]?sort>
<#list ls as i>${i} </#list>

OUTPUT


aardvark Barbara beetroot whale zeppelin

Je vais trier les nombres, les chaînes, les dates et les valeurs booléennes, et il y a aussi? Reverse (traduction gratuite).

Oh ouais, c'est bien. FTL contient beaucoup de Nanika inconnues, alors soyez vigilant. Quelqu'un peut-il traduire le document? Je ne peux pas le lire en anglais, mais mes yeux glissent.

C'est pourquoi je pense que c'est une solution rapide, alors j'écris la description suivante et je bake (dans JBake, le processus de conversion / génération du contenu du site s'appelle Bake).

TEMPLATE


<#--Trier et sortir(?vient d'ajouter un tri) -->
<#list alltags?sort as tag>
  <span>${tag}</tag>
</#list>

Ensuite, c'est un message d'exception inattendu, ma femme.

Failed to render file. Cause:
freemarker.core.NonSequenceException:
For "?sort" left-hand operand:
Expected a sequence, but this has evaluated to a collection
(Abrégé de manière appropriée)

En bref, vous dites: "N'est-ce pas une séquence? Vous ne pouvez pas utiliser le tri? (Traduction gratuite)". Je ne sais pas pourquoi cela ne fonctionne pas dans Collection même si le tri est implémenté! ??

Eh bien de cette façon ça fonctionnera

<#--Remettez-le dans les séquences-->
<#assign seq=[]/>
<#list alltags as tag>
  <#assign seq=seq+[tag]/>
</#list>
<#--Trier et sortir-->
<#list seq?sort as tag>
  <span>${tag}</tag>
</#list>

Je n'ai tourné que les listes et les éléments de tableau avec <#list>, donc je ne pensais pas qu'il y avait une telle différence entre Sequence et Collection. Je veux dire?

Recommended Posts

Pourquoi FreeMarker? Trier ne fonctionne-t-il pas avec List <String>?
Liste de travail