Как запретить Tomcat 7 / Spring / Tiles обрезать пробелы в выводе HTML

0

У меня есть довольно основное приложение Spring MVC, которое я создал с помощью Spring Roo. Таким образом, весь проект настроен как стандартное приложение Spring/Tiles (строительные леса, созданные Roo). Когда я смотрю на сгенерированный исходный код HTML, я вижу, что все пробелы/линии были обрезаны. Для целей отладки это сложно/проблематично для меня.

Я использую Spring 3.x с Tomcat 7.

Я искал вокруг SO и в Интернете и обнаружил, что существует директива jSP для trimWhiteSpace (пример на этой SO- странице), но когда я просматриваю всю созданную Roo кодовую базу, я не вижу эту директиву нигде.

Я даже дошел до добавления строк <init-param> и <jsp-config> в файл web.xml с указанием false, но это тоже не имело никакого значения.

На данный момент я не уверен, что это Tomcat, который лишает интервал, или если это что-то в Spring/Tiles, которое делает это.

Как я могу отключить эту функцию и иметь все интервалы/строки, выведенные в моем HTML, которые существуют в определениях моих тегов и моих jsp файлах?

Пример сгенерированного HTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML SYSTEM "about:legacy-compat">
<html><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta content="IE=8" http-equiv="X-UA-Compatible"/><link href="/V2/resources/dijit/themes/tundra/tundra.css" type="text/css" rel="stylesheet"/><link href="/V2/resources/styles/standard.css" media="screen" type="text/css" rel="stylesheet"/><link href="/V2/resources/images/favicon.ico" rel="SHORTCUT ICON"/><script type="text/javascript">var djConfig = {parseOnLoad: false, isDebug: false, locale: 'en-us'};</script><script type="text/javascript" src="/V2/resources/dojo/dojo.js"></script><script type="text/javascript" src="/V2/resources/spring/Spring.js"></script><script type="text/javascript" src="/V2/resources/spring/Spring-Dojo.js"></script><script type="text/javascript" language="JavaScript">dojo.require("dojo.parser");</script><script type="text/javascript" src="/V2/resources/jQuery/jquery-2.0.3.min.js"></script><link href="/V2/resources/jQWidgets-3.0.2/styles/jqx.darkblue.css" type="text/css" rel="stylesheet"/><script type="text/javascript" src="/V2/resources/jQWidgets-3.0.2/jqxcore.js"></script><title>Welcome to V2</title></head><body class="tundra spring"><div id="wrapper"><div version="2.0" id="header"><a title="Home" name="Home" href="/V2/"><img src="/V2/resources/images/banner-graphic.png"/></a></div><div id="main"><div version="2.0"><script type="text/javascript">dojo.require('dijit.TitlePane');</script><div id="_title_title_id"><script type="text/javascript">Spring.addDecoration(new Spring.ElementDecoration({elementId : '_title_title_id', widgetType : 'dijit.TitlePane', widgetAttrs : {title: 'Internal Error', open: true}})); </script><h2>Internal Error</h2><p>Sorry, we encountered an internal error.</p></div></div><div version="2.0" id="footer"><span><a href="/V2/">Home</a></span><span id="language"> | Language: <a title="Switch language to English" href="?lang=en"><img alt="Switch language to English" src="/V2/resources/images/en.png" class="flag"/></a> </span><span> | Theme: <a title="standard" href="?theme=standard">standard</a> | <a title="alt" href="?theme=alt">alt</a></span><span><a title="Sponsored by SpringSource" href="http://springsource.com"><img src="/V2/resources/images/springsource-logo.png" alt="Sponsored by SpringSource" align="right"/></a></span></div></div></div></body></html>

Пример default.jspx (макет базовой плитки):

<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" >  

    <jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" />

    <jsp:directive.page contentType="text/html;charset=UTF-8" />  
    <jsp:directive.page pageEncoding="UTF-8" /> 

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=8" />    

        <util:load-scripts />

        <spring:message code="application_name" var="app_name" htmlEscape="false"/>
        <title><spring:message code="welcome_h3" arguments="${app_name}" /></title>
    </head>

    <body class="tundra spring">
        <div id="wrapper">
            <tiles:insertAttribute name="header" ignore="true" />
            <tiles:insertAttribute name="menu" ignore="true" />   
            <div id="main">
                <tiles:insertAttribute name="body"/> 
                <tiles:insertAttribute name="footer" ignore="true"/>
            </div>
        </div>
    </body>
</html>

Как вы можете видеть, все пробелы/строки из определений макета плитки были удалены.

Теги:
spring
spring-mvc
tomcat
tiles

1 ответ

1
Лучший ответ

Таким образом, после много мучительных вытягиваний волос (и нескольких ссылок, которые подтолкнули меня в правильном направлении), оказывается, что обрезка пробелов не из контейнера, а скорее из парсера JSPX. Учитывая, что они являются файлами XML, синтаксический анализатор загружает всю структуру DOM и затем выгружает ее. При построении DOM он, очевидно, теряет и разделяет информацию между тегами. Apparnetly (я не тестировал) единственный способ сохранить промежуток между тегами - заключить все в блоки <jsp:text> (см. Здесь).

С другой стороны, я просто сдался и преобразовал все в JSP файлы, и все работает нормально. Легче для меня иметь дело в данный момент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню