2010-11-28 3 views
1

Je commence à travailler avec JSTL-spring. C'est merveilleux, mais j'ai besoin de revoir le code HTML qu'il génère. J'ai une méthode qui ajoute à une chaîne tout le code HTML, donc quand je <c:out> la chaîne il imprime une grande ligne, le navigateur l'interprète bien, mais pas moi, et je dois, pour déboguer avec précision et faire un code propre. En d'autres termes, j'ai besoin de sauts de ligne pour la chaîne HTML, pas de sauts de ligne pour le html interprété (pas de tag <br>). J'ai essayé /n mais il imprime juste /n. Voici exemple de code:Comment faire JSTL-spring générer du code HTML propre?

productThumbnails+="<div class=\"prod_box\">"; 
    productThumbnails+="<div class=\"top_prod_box\"></div>"; 
    productThumbnails+="<div class=\"center_prod_box\">"; 
     productThumbnails+="<div class=\"product_title\"><a href=\"details.html\">"+productTemp.getProductName()+"</a></div>"; 
     productThumbnails+="<div class=\"product_title\"><a href=\"details.html\">"+productTemp.getProductModel()+"</a></div>"; 
     productThumbnails+="<div class=\"product_img\"><a href=\"details.html\"><img width=\"90\" alt=\""+productTemp.getProductName()+"\" src=\""+productTemp.getProductImage()+"\"/></a></div>"; 
    productThumbnails+="</div>"; 
productThumbnails+="</div>"; 

Dans la vue, j'imprimer tout avec:

<c:out value="${productThumbnails}" escapeXml="false" /> 
+0

votre question n'est pas trop claire - essayez-vous d'imprimer le code HTML d'une certaine page rendue? et vous ne voulez pas que le code HTML soit traité par le navigateur? – anirvan

+0

non, je veux que le code html qui a finalement été généré soit lisible par moi, cause la façon dont je le fais, il colle tout dans une seule ligne, quand je veux le vérifier pour des erreurs cela prend longtemps. – Ernest

Répondre

3

Il y a deux façons:

  1. Ceci est en fait servletcontainer spécifique, mais fondée sur des l'historique des questions que vous utilisez Tomcat. Ajoutez le paramètre d'initialisation suivant à l'entrée JspServlet dans Tomcat/conf/web.xml.

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

    De cette façon, aucun espace qui est laissé par taglibs (JSTL et ainsi de suite) seront retouchées. Ce n'est pas parfait, mais généralement suffisant. Cela ne couvre cependant pas le HTML qui est écrit au mauvais endroit (c'est-à-dire pas dans JSP).

  2. Utilisez jTidyFilter. Déposez jtidyservlet.jar dans /WEB-INF/lib et déclarez le filtre dans votre Webapp/WEB-INF/web.xml selon its documentation.


Pour en revenir au commentaire que vous vous approchez de ce mal: la bonne approche serait de mettre List<Product> dans le cadre de la demande (le cas échéant par un grain de printemps) et utiliser JSTL <c:forEach> à itérer il.

<c:forEach items="${products}" var="product"> 
    ... 
    <div class="center_prod_box"> 
     <div class="product_title"><a href="details.html"><c:out value="${product.productName}" /></a></div> 
     <div class="product_title"><a href="details.html"><c:out value="${product.productModel}" /></a></div> 
     <div class="product_img"><a href="details.html"><img width="90" alt="${product.productName}" src="${product.productImage}"/></a></div> 
    </div> 
    ... 
</c:forEach> 

Cela donne plus de code propre et mieux maintenable (et une sortie HTML;)).

+0

Wow! De bonnes réponses, les 3 d'entre eux! Je vous remercie! J'ai une question, JspServlet ... im ne l'utilise pas, j'ai seulement sur mon web.xml une servlet de répartiteur, qui appelle jstlViewResolver. De toute façon je peux utiliser les trimSpaces dessus? Aussi je me demandais, n'est-ce pas que le jTidyFilter me rende un peu paresseux? et j'ai un peu peur qu'il ne soit pas maintenu dans le futur ou que ça rende l'application plus lente, qu'en penses-tu? Je pense que la solution 3erd et principale est la meilleure, mais j'aimerais que les composants de la vue soient un peu plus déconnectés, déconnectés, parce que ça va se compliquer au fur et à mesure de son évolution. – Ernest

+0

Le 'JspServlet' est dans le' web.xml' du servletcontainer lui-même, pas de votre webapp. Dans Tomcat, il se trouve dans le dossier '/ conf/web.xml' de l'installation de Tomcat. Quant à jTidyFilter, je ne sais pas. Je ne l'ai jamais utilisé car cela n'a pas beaucoup de sens pour moi de bien mettre en forme la sortie HTML :) Tout mon HTML est déjà bien formaté en JSP. – BalusC

+0

Merci mon frère! je l'ai! – Ernest

Questions connexes