0

我有一个使用 Spring Roo 创建的非常基本的 Spring MVC 应用程序。所以整个项目被设置为一个标准的 Spring/Tiles 应用程序(脚手架也是由 Roo 创建的)。当我查看生成的 HTML 源代码时,我看到所有的空格/换行符都被修剪了。出于调试目的,这对我来说很困难/有问题。

我将 Spring 3.x 与 Tomcat 7 一起使用。

我在 SO 和网络上进行了搜索,发现有一个 trimWhiteSpace jsp 指令(this SO post 中的示例),但是当我搜索整个 Roo 生成的代码库时,我在任何地方都看不到这个指令。

我什至已经将<init-param><jsp-config>行添加到指定的 web.xmlfalse中,但这也没有任何区别。

在这一点上,我不确定是 Tomcat 正在剥离间距,还是 Spring/Tiles 中的某些东西在做这件事。

如何禁用此功能并在我的标签定义和我的 jsp 文件中存在的我的 HTML 中输出所有间距/换行符?

生成的 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>

如您所见,瓷砖布局定义中的所有空格/换行符都已被删除。

4

1 回答 1

1

因此,经过大量痛苦的头发拉动(以及一些将我推向正确方向的链接),事实证明空白修剪不是来自容器,而是来自 JSPX 解析器。鉴于它们是 XML 文件,解析器正在加载整个 DOM 结构,然后将其转储出去。在构建 DOM 时,它显然会丢失标签之间的间距信息。显然(我还没有测试过)保持标签之间间距的唯一方法是将所有内容都包含在<jsp:text>块中(请参见此处)。

另一方面,我只是放弃并将所有内容转换为 JSP 文件,一切正常。我现在更容易处理。

于 2013-09-26T16:27:46.220 回答