2009-10-22 7 views
2

Est-il possible d'obtenir une liste de variables à l'intérieur du modèle et de les remplir en utilisant la liste? Je voudrais que mes utilisateurs créent leurs modèles ce qui signifie que je ne saurai pas à l'avance quelles variables seront disponibles?Apache Velocity: Quelles sont les variables disponibles dans les templates?

EDIT:

Dans mes utilisateurs du modèle décideront ce qui est imprimé. Tels que

utilisateurs $ $ dernière

mais de mon application, je ne veux pas connaître quelles sont les variables utilisées dans le modèle. Je voudrais obtenir une liste comme [derniers utilisateurs] qui inclut toutes les variables dans le modèle afin que je puisse les remplir selon les spécifications de l'utilisateur.

+0

Pouvez-vous fournir un code psuedo Velocity pour illustrer ce que vous essayez de faire? – Mark

Répondre

1

Vous pouvez être en mesure de rassembler une liste en affichant le modèle et en utilisant un ReferenceInsertionEventHandler qui génère une liste. Le problème avec ce bien est de savoir si les modèles ont des choses comme:

#if($foo) $bar #else $woogie #end 

Votre gestionnaire d'événements ne serait jamais voir soit $ bar ou woogie $, pas les deux.

Cette non prise en charge (et peut-être pas à jour) classe peut aider:

http://svn.apache.org/viewvc/velocity/engine/branches/1.x/experimental/templatetool/

+0

Le lien est cassé. – Algiz

+0

J'ai corrigé le lien. –

0

Je ne pense pas qu'il existe un moyen facile de le faire sans outrepasser certaines classes de vélocité.

Voici quelques options que je le ferais:

  1. Ajouter toutes les variables (je suis en supposant qu'il existe un ensemble prédéfini d'entre eux). Si c'est la performance lourde regarder dans la mise en cache.
  2. Demander aux utilisateurs quelles données ils ont besoin avant de rendre le modèle (si c'est une chose d'une seule fois juste une forme, si ces variables ne changent pas souvent les écrivent en DB).
  3. Demandez aux utilisateurs de fournir une liste de variables dont ils ont besoin dans un format spécifique à l'intérieur du modèle pour l'analyse facile avant rendu d'un modèle, comme: <!--%%__VARS__%%users,latest%%__VARS__%%-->
  4. Utilisez regexp pour rechercher le fichier modèle et chercher $ cas var, ce qui pourrait être difficile.
0

Here il y a des discussions et des idées pour résoudre ce problème. L'option préférée consiste essentiellement à implémenter un walker pour l'AST généré d'un template. Pas trivial.

0

J'ai trouvé ce doublure, (enregistrez-le comme un extrait) si vous ne vous en souvenez pas.

## #foreach($key in $context.keys) <pre> $key</pre> #end 

Hope it helps ...

Oh, retirez le ## comme il est commenté

Questions connexes