2010-02-02 7 views
7

J'ai un projet Java en cours d'exécution sur Glassfish qui rend un HTML hideux. C'est un effet secondaire de l'utilisation de diverses bibliothèques JSP internes et externes. Je voudrais mettre en place une sorte de filtre post-rendu qui alimenterait le HTML final via HTMLTidy afin que la source soit sympa et soignée pour faciliter le débogage. Est-ce possible?Flux de pages jsp rendues via htmltidy

Y a-t-il un mécanisme intégré pour effectuer une action après que le serveur a rendu les JSP en HTML? Cette action peut-elle obtenir le code HTML généré sous forme de chaîne et le manipuler? Existe-t-il une option intégrée facile pour faire cela sans codage supplémentaire?

Répondre

5
+0

Très cool. Merci d'avoir répondu!!! – Freiheit

+1

Je voudrais aussi noter que JTidyFilter est encore un peu rude, sans version officielle. Vous devez le télécharger depuis les nightlies de JTidy à: http://jtidy.sourceforge.net/nightly/ – Freiheit

0

Si vous pouvez modifier le flux de contrôle de sorte que vous obtenez la sortie html avant qu'il ne soit renvoyé au navigateur, puis jtidy peut vous aider.

Je considérerais cela comme un problème du pire cas. À long terme, ce qui devrait aider le plus est de séparer votre code HTML et de le refactoriser. Même dans les grands projets complexes, vous devriez être en mesure de le faire en petits morceaux et vous obtiendrez une amélioration progressive. Sinon, si vos problèmes se développent au point où Tidy ne peut pas aider, vous serez de retour là où vous avez commencé (et avec encore plus de code difficile à gérer).

3

Ce comportement peut également être éliminé dans une certaine mesure en définissant la propriété JSP 2.1 trimDirectiveWhitespaces à true. Cela peut être activé dans les fichiers JSP individuels par:

<%@page trimDirectiveWhitespaces="true" %> 

Ou sur tous fichiers JSP par l'entrée suivante dans web.xml (qui doit être déclarée Servlet 2.5!):

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <trim-directive-whitespaces>true</trim-directive-whitespaces> 
    </jsp-property-group> 
</jsp-config> 

En pré -JSP 2.1 conteneurs ou dans les conteneurs JSP 2.1 qui ne supporte pas cela pour certaines raisons internes, telles que Tomcat, vous devez consulter sa documentation JspServlet pour tous les paramètres d'initialisation. Dans par exemple Tomcat, vous pouvez le configurer et en définissant la trimSpaces init-PARAM JspServlet à true dans /conf/web.xml de Tomcat:

<init-param> 
    <param-name>trimSpaces</param-name> 
    <param-value>true</param-value> 
</init-param> 

A pris note devrait être que les approches les deux ne « reformater » pas vraiment le code HTML . En fait, il ne fait que réduire l'espace laissé par taglibs et scriptlets. Voir également this Sun article. Ainsi, par exemple les éléments suivants ..

<ul> 
    <c:forEach items="${list}" var="item"> 
     <li>${item}</li> 
    </c:forEach> 
</ul> 

..would essentiellement en fin

<ul> 
     <li>item1</li> 
     <li>item2</li> 
     <li>item3</li> 
</ul> 

Ainsi avec double indentation. Vous pouvez effectivement contourner ce reformater le code en tant que tels que les balises JSP sont demi-dentelée:

<ul> 
    <c:forEach items="${list}" var="item"> 
    <li>${item}</li> 
    </c:forEach> 
</ul> 

Mais je pense que JTidyFilter est plus facile ici :)

Questions connexes