如何让JSTL-spring生成干净的HTML代码?

时间:2010-11-28 17:37:11

标签: spring jstl

我开始使用JSTL-spring。这很棒,但我需要查看它生成的HTML代码。我有一个方法将所有HTML代码附加到字符串,所以当我<c:out>字符串打印一个大行时,浏览器会解释它很好,但不是我,我需要,准确地调试和制作一个干净的代码。

换句话说,我需要HTML字符串的换行符,而不是解释的html(不是<br>标记)的换行符。我尝试/n,但它只打印/n。这是代码示例:

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>";

在视图中,我用以下内容打印所有内容:

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

1 个答案:

答案 0 :(得分:3)

有两种方法:

  1. 这实际上是特定于servletcontainer,但根据您的问题历史记录,您正在使用Tomcat 。将以下初始化参数添加到JspServlet中的Tomcat/conf/web.xml条目。

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

    这样,将修剪taglibs(JSTL等)留下的任何空格。这并不完美,但通常就足够了。然而,这不包括写在错误位置的HTML(即不在JSP中)。

  2. 使用jTidyFilter。在/WEB-INF/lib中删除jtidyservlet.jar,并按照its documentationWebapp/WEB-INF/web.xml中声明过滤器。


  3. 回到评论说你正在接近这个错误:正确的方法是将List<Product>放在请求范围内(如果有必要由Spring bean)并使用JSTL <c:forEach>进行迭代在它上面。

    <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>
    

    这会产生更干净,更易维护的代码(和HTML输出;))。