2016-02-29 3 views
1

Maintenant, je travaille avec des entretoises, SiteMesh, la vitesse et la configuration peut déjà utilisertravail Sitemesh aveC#parse de vitesse ne va pas travaillé

Dans la page principale:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    #parse("common/taglibs.vm") 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
<div class="body-0214"> 
    #parse("/velocity/info/head.vm") 
    $body 
    #parse("/velocity/info/foot.vm") 
</div> 
</body> 
</html> 

En taglibs.vm j'avais définir une variable globale:

#set ($ctx=$request.contextPath) 
#set ($imageService=$controlUtil.getDomainName($session.servletContext)) 

quand dans le head.vm et main.vm je tente obtenir la variable globale:

$ctx 
$imageService 

et obtenir le résultat:

$ctx 
$imageService 

pas tout changement

mais quand je mets #parse("common/taglibs.vm") dans main.vm (la page de résultats), il obtenir le bon résultat:

http://127.0.0.1 

cette est un problème: pourquoi doit recommander #parse("common/taglibs.vm") dans la page des enfants, l'autre problème est quand je mets #parse("common/taglibs.vm") dans head.vm, Il fonctionne pas non plus, je suis très surpris de voir

pourquoi je suis arrivé à ce résultat, est tout où j'avais tort ou toujours été de cette façon, s'il vous plaît aidez-moi!

Répondre

1

Je pense que vous êtes face à un problème de configuration ou quelque chose qui est complètement en dehors de Velocity.

Commençons par simplifier les choses. Pour un test, placez tous les vm-templates suivants dans le même dossier. Mieux les mettre dans le dossier qui est déclaré le chemin du chargeur de ressources Velocity ou la racine Velocity.

Première étape:

taglib.vm:

#set($ctx = $request.contextPath) 

main.vm:

#parse("taglibs.vm") 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
     <div class="body-0214"> 
      $ctx 
     </div> 
    </body> 
</html> 

Le résultat sera le chemin de contexte - dans votre cas http://127.0.0.1. D'après ce que vous avez posté cela devrait fonctionner.

Deuxième étape:

Créer un fichier head.vm comme ceci:

$ctx 

et changer main.vm à ceci:

#parse("taglibs.vm") 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
     <div class="body-0214"> 
      #parse("head.vm") 
     </div> 
    </body> 
</html> 

Le résultat devrait être le même.

Troisième étape:

Créer un fichier secondLevel.vm:

$ctx 

Oui, même contexte que head.vm maintenant.

changer maintenant head.vm à

#parse("secondLevel.vm") 

Dans la configuration par défaut cela produira toujours le même résultat. Sinon, il est possible que la configuration par défaut ait été modifiée. Si vous voyez $ctx au lieu de http://127.0.0.1, vérifiez la configuration Velocity. Recherchez parse_directive.maxdepth. La valeur doit être supérieure à 1.
Veuillez noter que cette valeur par défaut est 10, donc vous pouvez analyser jusqu'à 10 fichiers vm imbriqués par défaut.

Si vous ne parvenez pas à voir les résultats souhaités dans la première ou la deuxième étape, je suggère de tester cela dans un tout nouveau projet, pour éliminer les effets secondaires.

Bien que pas de risque de causer le problème, assurez-vous que votre sur la dernière version de Velocity 1.7