2010-10-14 10 views
0

J'ai écrit une simple directive personnalisée, et je lui ai fait passer tous les attributs comme des attributs d'éléments réguliers. La syntaxe de la balise comme suit: attributFreeMarker ne parvient pas à analyser les données HTML 5 - * atttributes

 
Caused by: freemarker.core.ParseException: Encountered "-" at line 32, column 56 in unobtrusive/index.ftl. 
Was expecting: 
    "=" ... 

En effet, il ne peut pas sembler analyser « données cible »:

 
<@link_to controller="unobtrusive" action="do-get" data-target="result">Do Get</@> 

Malheureusement, je reçois une exception. Quand je le change en "data_target" avec le trait de soulignement, tout va bien .... mais j'aurais vraiment besoin du tiret: "-".

Quelqu'un peut-il aider?

Merci,

Igor

Répondre

1

Votre problème est le - mais dans ce contexte, il n'est pas utilisé comme une balise HTML, il est un argument FTL pour une directive sur mesure. FTL n'aime pas les tirets dans les noms de variables, mais cela ne vous empêchera pas d'inclure le tiret dans la sortie.

Vous n'avez pas inclus votre directive, mais je pense que ce que vous essayez d'accomplir pourrait ressembler à ceci. Il suffit d'écrire votre lien dans la macro, en référençant le data_target comme $ {data_target}. Notez que le résultat a une cible de données en sortie.

<#macro link_to controller action data_target> 
    Here is the controller: ${controller} 
    Here is the action: ${action} 
    Here is the data-target: ${data_target} 
</#macro> 

<@link_to controller="unobtrusive" action="do-get" data_target="result"></@> 
+0

Andy, merci pour une réponse rapide, mais ce n'est pas portion. Je l'ai écrit non pas en macro, mais en classe Java. En tout cas, je pourrais faire un trait de soulignement, ce qui fonctionne, mais ce n'est pas ce dont j'ai besoin. J'ai besoin d'un tiret: "-" – ipolevoy

+0

Freemarker est un modèle de langauge, et ne sait rien du HTML. Oui freemarker est souvent utilisé pour produire html, mais il ne l'analyse pas, et il ne serait certainement pas triplé à cause de certaines fonctionnalités html. – Andy

2

Au 2.3.22, vous pouvez utiliser - (et . et :) dans le cadre d'un nom si vous le faites précéder un \, comme dans <@link_to data\-target=...>. (Ce n'est pas trop mignon, mais - est déjà utilisé en tant qu'opérateur de soustraction, et la fixation ne serait pas rétrocompatible, et donc doit attendre une augmentation majeure de la version FTL.)

+0

merci de le réparer. Ça semble fonctionner. Cependant IntelliJ 14.1.2 signale ceci comme une erreur. Est-il possible de corriger cette syntaxe dans IntelliJ? – ipolevoy

+0

Vous devriez le signaler à celui qui maintient ce plugin (JetBrains, je suppose). Pour contourner le problème, ils appellent peut-être Freemarker pour vérifier la syntaxe du template, auquel cas vous pouvez remplacer manuellement le fichier 'freemarker.jar' que le plugin utilise. – ddekany