gpt4 book ai didi

html - 如何防止 Tomcat 7/Spring/Tiles 修剪 HTML 输出的空格

转载 作者:行者123 更新时间:2023-11-28 23:01:12 26 4
gpt4 key购买 nike

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

我在 Tomcat 7 中使用 Spring 3.x。

我搜索了 SO 和网络,发现有一个 trimWhiteSpace jsp 指令(example at this SO post),但是当我搜索整个 Roo 生成的代码库时,我没有在任何地方看到这个指令。

我什至添加了 <init-param><jsp-config>指定 false 的 web.xml 行,但这也没有任何区别。

此时,我不确定是 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 示例(基本图 block 布局):

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

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

最佳答案

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

另一方面,我只是放弃并将所有内容转换为 JSP 文件并且一切正常。目前对我来说更容易处理。

关于html - 如何防止 Tomcat 7/Spring/Tiles 修剪 HTML 输出的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18922236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com