首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsp: tagx中失去空格的文本

jsp: tagx中失去空格的文本
EN

Stack Overflow用户
提问于 2009-12-11 16:59:35
回答 3查看 3.1K关注 0票数 1

试图使用JSPX却遇到了一个奇怪的问题。根据JSP文档,jsp:text中的文本不应该被移除空格,但是当我在tagx文件的开头有带前导空格的jsp:text元素时,当在jspx视图中使用时,前面的空格就消失了。

我已经做了相当多的谷歌搜索,但找不到是什么导致这个被删除。我已经验证了直接包含在jspx视图中的相同jsp:text实例是否正确工作,但是将其放入单独的tagx文件会导致其丢失。

这是在Jetty6.1.19和6.1.22下使用JSP2.1库。

编辑:下面是一些示例代码。请注意,<jsp:text>标记中的前导和尾部空格被去掉。从我看到的JSP文档判断,应该保留这些文档中的空白。

WEB/tab/nameValuePair.tagx:

代码语言:javascript
复制
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page">
<jsp:directive.attribute name="name" type="java.lang.String" required="true"/>
<jsp:directive.attribute name="value" type="java.lang.String" required="true"/>
<jsp:text> ${name}=${value} </jsp:text>
</jsp:root>

test.jspx:

代码语言:javascript
复制
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:t="urn:jsptagdir:/WEB-INF/tags">
<jsp:directive.page contentType="text/html; charset=ISO-8859-1" />

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <t:nameValuePair name="name" value="Google" />
        <t:nameValuePair name="age" value="11" />
        <t:nameValuePair name="description" value="Popular Search Engine" />
        <jsp:text> test=value </jsp:text>
    </body>
</html>

</jsp:root>

产出:

代码语言:javascript
复制
<html><head><title>Test</title></head><body>name=Googleage=11description=Popular Search Engine test=value </body></html>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-13 23:14:12

在我看来,标签正在被修剪,这样写标签就更简单了。例如,最后一个新行将产生一个使用标记的空格,这可能会很糟糕。

尽管为什么不将文本放在一个跨度内的标记中:

代码语言:javascript
复制
<jsp:text><span> ${name}=${value} </span></jsp:text>

或者使用非中断空间:&nbsp;

这样你就避免了修剪,你应该得到你想要的结果。

票数 0
EN

Stack Overflow用户

发布于 2016-10-14 09:05:24

我也有这个问题,失去空白。我使用jspx文档和预编译器进行生产。但是在我的开发机器中,每当jsp发生变化时,我就会使用嵌入式tomcat动态地重新编译jspx文档。

首先,我需要使用预编译程序和嵌入式tomcat编译器实现相同的编译结果,这是我的web.xml的代码片段。

代码语言:javascript
复制
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspx</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

在激活此指令时,两者的行为都是相同的。如果您试图保留空白,请不要这样做:

代码语言:javascript
复制
<span class="ex1"> </span>
<span class="ex2"><jsp:text> </jsp:text></span>
<span class="ex3"> <jsp:text><!-- keep --> </jsp:text></span>
<span class="ex4"><!--  keep --></span>
<span class="ex5"><span> </span> <!--  keep --></span>
<span class="ex6">&#032;</span>
<span class="ex7">&#009;</span>

这是我唯一可行的选择:

代码语言:javascript
复制
<span class="ex8">&#160;</span>
<span class="ex9"><c:out value=" " /></span>

生成的jsp编译如下所示:

代码语言:javascript
复制
out.write("<span class=\"ex1\"/>");
out.write("<span class=\"ex2\">");
out.write("</span>");
out.write("<span class=\"ex3\">");
out.write("</span>");
out.write("<span class=\"ex4\">");
out.write("</span>");
out.write("<span class=\"ex5\">");
out.write("<span/>");
out.write("</span>");
out.write("<span class=\"ex6\"/>");
out.write("<span class=\"ex7\"/>");
out.write("<span class=\"ex8\">");
out.write(' ');
out.write("</span>");
out.write("<span class=\"ex9\">");
if (_jspx_meth_c_005fout_005f0(_jspx_th_ktr_005fform_005f0, _jspx_page_context))
  return true;
out.write("</span>");

顺便说一下。您可以在编译后的jsp中看到引用,它是XML中的一个非中断空间,它导致out.write(‘');。但是,即使你没有看到它,也会保留不破的空间。如果你做了一个hexdump -C test.jspx,你会得到:

代码语言:javascript
复制
6f 75 74 2e 77 72 69 74  65 28 27 c2 a0 27 29 3b  |out.write('..');|

"..“在右边的列中,显示不可打印的字符"c2 a0“,这是unicode的”非中断空间“。

由于不中断的空间并不总是您想要的,所以您唯一的选择是<c: out value=""/>。如果有其他选择,我很高兴在评论中听到。

票数 0
EN

Stack Overflow用户

发布于 2019-07-02 11:12:46

我的文本仍然必须中断,所以我在<wbr> s之间的空格之前添加了${...}

事实证明,这在中不起作用,问题是这一行:

代码语言:javascript
复制
<%@ page trimDirectiveWhitespaces="true" %>

这个问题解决了:

代码语言:javascript
复制
<%@ page trimDirectiveWhitespaces="false" %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1889389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档