> JSPX最小化我们不希望使用的标签,例如< div class =“foo”>< / div>成为< div class =“foo”/>这被浏览器不同地解释
> JSPX标签必须关闭,而一些HTML标签应该保持未关闭,例如< script ...>.自封闭< script ... /> IE和Firefox无法识别标签.
>指定HTML5 doctype(<!DOCTYPE html>)
>内联JavaScript
这个问题是对另外几个问题的回应,这一切都归结于同样的问题.我找不到全面的答案,所以我发布了我的发现结果.
相关问题:
> jspx script element on GlassFish v3
> Keep JSPX from creating self closing tags (<div></div> != <div/>)
解决方法
它归结为了解这种语言的XML性质. JSPX是XML,而HTML不是.其中一个含义是JSPX解析器“最小化”空标签,因为XML不区分自我关闭标签和空标签.这导致< script ...>和< div>< / div>标签问题但是值得注意的是,虽然JSPX文件必须是有效的XML,但它们所产生的输出则不是.因此,让JSPX文件生成HTML(不仅仅是XHTML)是完全正确的.事实上,您可以使用JSPX来生成任何文本输出,如CSV,CSS或JS,尽管这将是相当不方便的.
考虑到上述情况,最干净的解决方案似乎是使用诸如htmlScript,htmlDiv等标签来创建自定义taglib.这些标签可以像这样使用:
<html:div styleClass="foo" selfClosing="false">${message}<html:div>
<div style="foo"></div> <div style="foo">Hello</div>
像这样的taglib将允许您使用JSPX构建HTML页面,而不使用相当难看的解决方法.
构建HTML页面似乎是JSPX最常见的应用之一.有一点令人惊讶的是没有标准的HTML库. JSF有一个,但如果你使用干净的JSP它将不会帮助你.可能是第三方图书馆填补了这个差距,但找不到它.
如果你不喜欢编写自己的taglib,另一种方法是使用CDATA:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]>
要么:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]>
相关问题中的其他提案是将评论或空的< jsp:text>里面< script>其结果相同:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script>
(如Ralph所说,以上不适用于WebSphere)
要么:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script>
CDATA也在其他几种情况下派上用场.其中一个是打印HTML5 doctype(<!DOCTYPE html>). JSPX不会让您将DOCTYPE声明放在您的文档中,因为它不是有效的XML. JSPX还清除了jsp:output标签,但它打印SYSTEM属性,即使它是空的.解决方法是将DOCTYPE包装在页面开头的CDATA中:
<![CDATA[<!DOCTYPE html>]]>
CDATA也可用于封装内联JavaScript.虽然这会产生解析错误,因为“<”标志:
<script type="text/javascript"> var x = 7 < 5; </script>
这可以正常工作:
<script type="text/javascript"> <![CDATA[ var x = 7 < 5; ]]> </script>
请注意,JSPX中的CDATA会按原样输出所有内容,但仍会评估EL表达式.因此如下:
<![CDATA[ <jsp:expression>"asd " + "def"</jsp:expression> ${1 + 2} ]]>
生产:
<jsp:expression>"asd " + "def"</jsp:expression> 3
希望这可以帮助 :)